위임 속성 선언에서 '약함'과 '할당'의 차이점은 무엇입니까?


87

이것의 차이점은 무엇입니까?

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

이:

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

대리인에게 속성을 사용하고 싶습니다.

답변:


153

유일한 차이점 weakassign객체 경우이다 weak속성 포인트가 해제되는 다음의 값 weak포인터로 설정 될 것입니다 nil당신이 쓰레기를 액세스하는 위험을 실행하지 않도록. 를 사용 assign하면 그렇게되지 않으므로 객체가 아래에서 할당 해제되고 액세스하려고하면 쓰레기에 액세스하게됩니다.

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


16
일부 Cocoa Touch 프레임 워크 클래스가 여전히 델리게이트에 할당을 사용하는 이유를 알고 있습니까? 예를 들어 UISearchDisplayController 의 대리자 는 여전히 할당됩니다. 왜 업데이트되지 않았습니까?
Pwner

@Pwner는 iOS 8.0에서 더 이상 사용되지 않는 것 같습니다
Stavash

다음은 더 이상 사용되지 않는 예입니다. 대리자 UITableViewassign위한 경우도 있습니다 .@property (nonatomic, assign) id <UITableViewDelegate> delegate;
Chris Nolet 2015 년

3
@ChrisNolet 아마도 내부적으로 MRC (Manual Reference Counting)를 사용하고 있기 때문일 것입니다.
Marco Sero 2015

2
오늘부터 UITableView 대리자의 예는 다음과 같습니다. @property (비원 자성, 약한, nullable) id <UITableViewDelegate> delegate; 그래서 그것은 더 이상 유효한 예가 아닙니다.
sdoowhsoj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.