强/弱/保留/ unsafe_unretained / assign

综合属性的属性:保留/分配

  • 保留 – 保留,旧值被释放并被分配
  • 分配 – 它只被分配

所有权属性: IOS5 = strong / weak IOS4 = retain / unsafe_unretained

  • 强(iOS4 =保留) – 我是主人,你不能在这个目标罚款之前释放这个=保留

  • 弱(iOS4 = unsafe_unretained) – 与分配,保留或释放相同的东西

所以unsafe_unretained ==分配?

@property (nonatomic, assign) NSArray * tmp; 

等于?

 @property (nonatomic, unsafe_unretained) NSArray * tmp; 

反之亦然?

如果是这样,哪一个更喜欢在iOS4,或为什么有(unsafe_unretained),如果它完全相同的分配?

并在iOS4的代表应该unsafe_unretained或分配?

如果是这样,哪一个更喜欢在iOS4,或为什么有(unsafe_unretained),如果它完全相同的分配?

你应该使用unsafe_unretained 。 您想向您的代码读者展示您实际上想要使用的代码,但是这不可行,因为在您想要部署的iOS版本上没有可用的弱代码。

有一天你会放弃对iOS4的支持。 然后你可以只searchunsafe_unretained并用weak代替所有的。 这将比寻找assign和找出你是否意味着assign或者weak

使用unsafe_unretained创build更易读易懂的代码,开发人员的意图更易于查看。 基本上同样的原因,我们使用YES而不是1

Cocoa和Cocoa Touch中有几个类还不支持弱引用,这意味着你不能声明弱属性或弱局部variables来跟踪它们。 这些类包括NSTextView,NSFont和NSColorSpace; 有关完整列表,请参阅转换到ARC版本说明。

如果您需要使用对这些类之一的弱引用,则必须使用不安全的引用。 对于属性,这意味着使用unsafe_unretained属性:

  @property (unsafe_unretained) NSObject *unsafeProperty; 

对于variables,你需要使用__unsafe_unretained:

 NSObject * __unsafe_unretained unsafeReference; 

不安全的引用类似于弱引用,因为它不保留其相关对象的活动状态,但是如果目标对象被释放,它将不会被设置为零。 这意味着你将留下一个悬挂的指针,指向原来被释放的对象占用的内存,因此术语“不安全”。发送消息给悬挂指针将导致崩溃。

礼貌:苹果( https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html )。