2012-02-24 3 views
82

에서 '약한'와 '할당'의 차이점은 무엇 뭐죠이 차이 :위임 속성 선언

@property (nonatomic, weak) id <SubClassDelegate> delegate; 

이 :

@property (nonatomic, assign) id <SubClassDelegate> delegate; 

내가 명 규모의 건물을 사용하고 싶습니다.

답변

145

weakassign 사이의 유일한 차이점은 객체가 weak 특성 포인트가 해제되는 경우 쓰레기를 액세스하는 위험을 실행하지 않도록, 다음 weak 포인터의 값이, nil로 설정 될 것입니다. assign을 사용하면 그럴 수 없으므로 오브젝트가 사용자로부터 할당 해제되고 액세스하려고하면 가비지에 액세스하게됩니다.

Objective-C 개체의 경우 weak을 사용할 수있는 환경에 있으면 사용해야합니다.

+16

왜 Cocoa Touch 프레임 워크 클래스 중 일부는 여전히 델리게이트에 assign을 사용하고 있는지 알고 있습니까? 예를 들어 [UISearchDisplayController] (https://developer.apple.com/library/ios/documentation/UIKit/Reference/UISearchDisplayController_Class/Reference/Reference.html#//apple_ref/occ/instp/UISearchDisplayController/delegate)의 대리인은 [ 여전히 할당됩니다. 왜 그것은 지금까지 업데이트되지 않았습니까? – Pwner

+0

@Pwner는 iOS 8.0에서 더 이상 사용되지 않는 것처럼 보입니다. – Stavash

+0

다음은 비추천되지 않는 예제입니다 : 심지어'UITableView'는 델리게이트에 대해'assign'을가집니다 : @property (nonatomic, assign) id 델리게이트; –