2012-07-31 2 views
1

나는 objective-c에 익숙하지 않으며 대리인이 사용되는 방식과 거의 혼돈 스럽다. 나는이 코드를 보았고 의심의 일부를 명확히하기 위해이 코드를 사용하고자한다. 여기objective -c delegates syntax query

#import <Foundation/Foundation.h> 

@protocol ProcessDataDelegate <NSObject> 

@required 
- (void) processSuccessful: (BOOL)success; 

@end 

@interface ClassWithProtocol : NSObject 
{ 
    id <ProcessDataDelegate> delegate; 
} 

@property (retain) id delegate; 

-(void)startSomeProcess; 

@end 

, 단어 2 참조 "위임"누군가가 "ID 각도 브라켓 대리인이 각도 브래킷 폐쇄"와 문맥에서 사용하면 무슨 뜻인지 설명 할 수있다?

다시 위임자 이름이있는 속성이 있습니다. 어떤 종류의 충돌도 야기하지 않아야합니까 ?? 사전에

감사합니다,

+2

IMHO 속성에도 프로토콜 요구 사항이 있어야합니다. 코드는 그대로 작동하지만 @property (retain) id 대리자를 작성하는 것이 더 명확합니다. –

답변

2

아니, 단지 하나의 속성, @property (retain) id delegate에 의해 정의 된 하나가있다; 다른 하나는 (일종의)NSObject의 개인 변수는 객관적인 의미에서 속성이 아닙니다 ... 그러면 키워드가 .m 파일에서 확장되어 속성을 확장합니다.

다른 표기인 id<protocol>은 해당 대리인이 특정 프로토콜을 준수 할 것으로 예상됩니다.

클래스에서 두 가지 모두에 액세스 할 수 있지만 외부에서 속성에만 액세스 할 수 있습니다. 또한 속성의 경우 유지 (ARC를 사용하지 않을 때)의 경우 메모리 관리 루틴이 생성됩니다.

@interface MyClass() 

@property (nonatomic, retain) NSString privateString; 

@end 

@implementation 
@synthetize privateString; 

// ... 

@end 
2
:

(? 혼란)을 완료하려면 강의를, 당신은 같은 익명의 범주에 대신 .H의하는 .m 파일을 정의 할 때, 클래스 개인 특성을 가지고 할 수있는 좋은 방법이

이 줄 :

id <ProcessDataDelegate> delegate; 

delegate라는 인스턴스 변수이며, 그만큼 그 객체가 ProcessDataDelegate 프로토콜을 채택, 당신이 좋아하는 어떤 유형의 객체가 될 수 있다고 말한다.

나중에 @property로 시작하는 라인은 인스턴스 변수와 이름이 같은 클래스의 Objective-C 2.0 속성을 선언하는 것입니다. 그것은 갈등이 아닙니다. 속성의 선언은 위임 인스턴스 변수에 대한 getter/setter 메서드의 바로 가기입니다.

현대 OBJ-C 사용이 될 것입니다 :

@interface ClassWithProtocol : NSObject 

@property (retain) id<ProcessDataDelegate> delegate; 

- (void)startSomeProcess; 

@end 

당신은 모든 Apple's Objective-C language documentation에서이 물건에 대해 읽을 수 있습니다.