2014-06-10 2 views
1

Objective-C에서 iOS 프로그래밍을 처음 사용했습니다. 약한 속성을 사용하는 대리자에 대한 포인터를 선언해야한다는 것을 알고 있습니다. 델리게이트의 NSMutableArray는 어떻습니까? 일대 다 관계에서,iOS에서 델리게이트 배열을위한 포인터가 약합니까?

@protocol IHandler <NSObject> 

- (void)addDelegate: (id<IDelegate>) delegate; 
- (void)removeDelegate: (id<IDelegate>) delegate; 
- (BOOL)hasDelegate: (id<IDelegate>) delegate; 
- (void)clearDelegates; 

@end 

답변

2

기술적으로는 관찰자가 아니라 참가자에 대해 이야기한다 : 나는 대리자의 목록이 필요합니다. Nitpicking은 제쳐두고, 반 구체 NSPointerArray, 특히 +weakObjectsPointerArray을 사용해야합니다. iOS 6 이후부터 사용 가능하며, NSArray과 달리 NULL을 포함 할 수있는 포인터 배열이며 개별 항목과의 약한 관계를 자동으로 유지할 수 있습니다.

+0

그래서'(id ) delegate'을 type-safety를위한 인터페이스에두고 있지만 .m의 NSPointerArray를 사용해야합니다. NSPointerArray 항목을 살펴볼 때 nil과 비교해야합니까? – 4ntoine

+0

CFSetCreateMutable (NULL, 0, NULL)에 의해 생성 된'NSPointerArray' 또는'NSMutableSet'은 무엇이 선호됩니까? 왜? (http://a-coding.com/observer-pattern-in-objective-c/) – 4ntoine

+0

'NSPoniterArray'가 바람직 할 것입니다 - 그런 종류의 세트 (또는 이와 동등한'CFArray')는 weak 참조가 아닌 unsafe_unretained 포인터를 호스트합니다 . 그리고 예, 당신은 아마도 당신이 디자인 한 인터페이스를 유지하여 사람과 컴파일러가 경고를 확인하기 위해 프로토콜이 필요하다는 것을 알릴 수 있습니다. – Tommy