如果我们对同一IBOutlet使用强和保留,会发生什么情况?

时间:2019-09-11 13:08:27

标签: ios objective-c xcode

我们可以对同一IBOutlet使用Strong和Retain吗? 如果我们这样做会发生什么?

像这样的事情 @property(保留,强壮)NSNumber * property;

2 个答案:

答案 0 :(得分:1)

如果使用的是ARC,将获得相同的效果。不管您使用的是strong还是retain属性。

From Apple doc

  

ARC不必评估何时使用保留,释放和自动释放,而是可以评估对象的生存期要求,并在编译时自动为您插入适当的内存管理调用。编译器还会为您生成适当的dealloc方法。 通常,如果仅使用ARC,则仅当您需要与使用手动引用计数的代码进行互操作时,传统的Cocoa命名约定才重要。

答案 1 :(得分:1)

  

我们可以对同一个IBOutlet使用Strong 保留吗?如果我们这样做会发生什么?

[已添加重点]

假设使用ARC,但可能没有什么区别:

是的,并且编译器的行为就像您只键入其中之一(它们是同义词)一样。

实际上,只要您编写不兼容的组合,例如,

,编译器似乎就不会介意键入属性的频率
@property (copy, copy, copy, copy) NSNumber *copiedProperty;
@property (retain, strong, retain, strong) NSNumber *strongProperty;

被接受(并产生与仅包含一个copyretain / strong的等效声明相同的代码)!但是:

@property (weak, copy) NSNumber *willProduceAnErr;

不是因为它没有意义。