强标识符是@property语句的默认标识符吗?

sch*_*udu 18 cocoa objective-c

我正在学习Objective-C和Cocoa Framework(通过Aaron Hillgass的书),并试图弄清楚为什么以下行包含"强"标识符.

@property (strong) NSManagedObjectContext *managedObjectContext;
Run Code Online (Sandbox Code Playgroud)

据我了解,强是默认的,为什么我需要明确声明它?

Tea*_*App 19

您可以在不编写任何内容的情况下声明它,但是当您回到代码或其他开发人员查看您的代码时会发生什么?

您可能知道默认值将设置为strong,但是初级程序员会非常困惑以确定声明的变量是强还是弱.

  • 另一个原因是向后兼容性.如果我尝试在旧版本的iOS SDK上使用该代码(这种情况很少见,但仍然可能),我会收到编译错误,因为`strong`无法识别.但是,如果没有限定符,它将编译正常,但它最有可能最终导致内存管理崩溃,就像之前ARC一样,属性默认为__unsafe_unretained. (11认同)
  • 对于对象类型,@ borrrden的默认值已更改.编译器非常聪明,知道如果我有一个属性作为对象,它应该是强大的,而不是赋值. (2认同)