목표-C에서 프로토콜/딜러를 확장하는 방법은 무엇입니까?
AVAudioPlayer와 같은 클래스를 확장하려면 AVAudioPlayer Delegate에 다른 방법을 추가하는 가장 좋은 방법은 무엇입니까?
카테고리를 만들면 되나요, 확장하면 되나요?
확장할 경우 실제 위임자 getter/setter를 덮어쓰도록 해야 합니까?프로토콜을 어떻게 확장할 수 있습니까?
다음은 나에게 오류를 줍니다.
@protocol AudioTrackDelegate : AVAudioPlayerDelegate {
- (void)foo;
}
@end
@interface AudioTrack : AVAudioPlayer {
}
@end
다른 프로토콜을 구현하는 프로토콜을 만드는 구문은 다음과 같습니다.
@protocol NewProtocol <OldProtocol>
- (void)foo;
@end
메소드를 호출하려면NewProtocol
로 입력한 포인터에OldProtocol
당신은 전화할 수 있습니다.respondsToSelector
:
if ([object respondsToSelector:@selector(foo)])
[(id)object foo];
또는 스텁 메소드를 의 범주로 정의합니다.NSObject
:
@interface NSObject (NewProtocol)
- (void)foo;
@end
@implementation NSObject (NewProtocol)
- (void)foo
{
}
@end
프로토콜은 컴파일된 앱에 코드를 추가하지 않습니다. 프로토콜은 클래스가 프로토콜에 "적합한" 것으로 간주되는 메서드를 구현해야 한다는 사실만 강제합니다.이를 유용하게 사용하면 동일한 방식의 작동 방식으로 클래스 그룹을 생성할 수 있습니다.<printable>
아니면<serialized>
, 그 외에. 그래서 당신은.<plays>
프로토콜 예:
@protocol plays
- (void) play;
- (NSString *) type;
@end
그리고 그 다음에 그에 맞는 수업은<plays>
MUST를 구현해야 합니다.play
그리고.type
방법들.그렇지 않으면 컴파일러가 경고를 보내지만 어쨌든 클래스를 컴파일합니다.코드에서 개체가 다음 코드를 사용하는 프로토콜을 준수하는지 확인합니다.
if ([obj conformsTo: @protocol(plays)]) {
[obj play];
}
카테고리는 실제로 클래스에 새 메서드를 동적으로 추가합니다.이러한 메서드는 선택기로 런타임에 전역적으로 액세스할 수 있으며 이름으로 호출할 수 있습니다.@selector(foo)
그리고.[object foo:bar];
카테고리의 목적은 클래스의 소스 코드가 없더라도 클래스에 특별한 새 코드를 추가하는 것입니다.보안 문제가 있을 수 있으며 수업 중에 메모리 누수 등이 발생할 수 있습니다.
당신의 경우에는 아마 다른 파일에AVAudioPlayerDelegate_TrackOps.m
#import "AVAudioPlayerDelegate.h"
@implementation AVAudioPlayerDelegate (TrackOps)
- (NSObject *) foo {
// do foo stuff;
return bar;
}
@end
의 범주로 지정하면 다음과 같습니다.NSObject
모든 클래스가 응답하도록 합니다.foo
.Foo
독립적인 방법이 될 수 있습니다.Objc_perform_selector(@selector(foo))
뿐만 아니라.
요약: 카테고리를 사용하여 클래스에 빠른 메서드를 추가하고, 메서드 구현을 실행하기 위한 프로토콜을 사용하며, 하위 클래스를 사용하여 기존 클래스(구성원 변수 추가 또는 주요 새 기능 추가 등)를 전문화합니다.하위 클래스가 필요하지 않고 원하는 경우에는 한 두 가지 메서드를 재정의하는 데 범주를 사용할 수도 있지만 일반적으로 클래스에 기능을 추가하려는 경우에는 하위 클래스를 만듭니다.이 주제에 대한 더 많은 예, 아이디어, 기타 일반적인 정보는 항상 Apple의 Objective-C 소개가 있습니다.
언급URL : https://stackoverflow.com/questions/732701/how-to-extend-protocols-delegates-in-objective-c
'source' 카테고리의 다른 글
현재 카테고리의 워드프레스 게시물만 나열합니다. (0) | 2023.10.26 |
---|---|
Retrofit 2 - 동적 URL (0) | 2023.10.26 |
wp_nav_메뉴 항목에 특징 이미지 추가 (0) | 2023.10.26 |
typedef 포인터 상수 이상함 (0) | 2023.10.26 |
Laravel: 데이터베이스에 동적으로 연결 (0) | 2023.10.26 |