提问



我是Obj-C的新手,所以我的第一个问题是:


在指向对象的指针的@property声明中,strongweak之间有什么区别?


另外,nonatomic是什么意思?

最佳参考


强引用(在大多数情况下将使用)意味着您希望拥有使用此属性/变量引用的对象。只要您指向具有强引用的对象,编译器就会注意您分配给此属性的任何对象都不会被销毁。只有将属性设置为nil后,对象才会被销毁(除非一个或多个其他对象也拥有对它的强引用)。


相反,如果弱引用,则表示您不希望控制对象的生命周期。您引用弱的对象仅存在,因为至少有一个其他对象拥有强引用。一旦不再是这种情况,对象就会被破坏,你的弱属性将自动设置为nil。 iOS中最常见的弱引用用例是:



  1. 委托属性,通常被弱引用以避免保留周期,以及

  2. 视图控制器主视图的子视图/控件,因为主视图已经强烈保存了这些视图。



原子与非原子是指编译器为属性合成的getter和setter方法的线程安全性。 atomic(默认值)告诉编译器使访问器方法成为线程安全的(通过在访问ivar之前添加一个锁),而非原子反义词则相反。非原子的优点是性能略高。在iOS上,Apple几乎所有属性都使用非原子,因此一般建议您也可以这样做。

其它参考1


考虑气球方面的强弱参考可能会有所帮助。


只要至少有一个人握住附着在其上的绳子,气球就不会飞走。持有字符串的人数是保留计数。当没有人抓住绳子时,气球会飞走(dealloc)。许多人可以使用同一个气球的字符串。您可以使用强引用和弱引用来获取/设置属性并在引用的对象上调用方法。


一个强大的参考就像持有一个字符串到那个气球。只要您抓住连接到气球的绳子,它就不会飞走。


弱参考就像看气球一样。你可以看到它,访问它的属性,调用它的方法,但你没有该气球的字符串。如果每个人都拿着绳子放开,气球飞走了,你再也无法进入了。

其它参考2


strong :为其分配传入值,它将保留传入值并释放实例变量的现有值


:将传入的值分配给它而不保留它。


所以基本的区别在于保留新变量。
通常你想要保留它,但有些情况下你不想拥有它,否则你会得到一个保留周期而不能释放对象的内存。例如,obj1保留obj2和obj2保留obj1。解决这种问题您使用弱引用的情况。

其它参考3


虚假答案: -


我想在上面的答案中给出了解释,所以我只想告诉你在哪里使用 STRONG 以及在哪里使用 WEAK:


Weak的使用: -
1.代表们
2.奥特莱斯
3.子视图
4.控制等


Strong的使用: -
 保留在 WEAK 中未包含的所有地方。

其它参考4


强大,这些关键字围绕Objective-C中的对象所有权


什么是对象所有权?


指针变量意味着它们指向的对象的所有权。



  • 当方法(或函数)具有指向对象的局部变量时,该变量被称为拥有指向的对象。

  • 当一个对象有一个指向另一个对象的实例变量时,带有指针的对象称拥有指向的对象。



无论何时指针变量指向一个对象,该对象都有一个所有者并将保持活跃状态​​。这称为引用。


变量可以选择不取得它指向的对象的所有权。不取得对象所有权的变量称为引用。


在这里寻找详细解释揭秘@property和属性[12]

其它参考5


在这里, Apple文档使用各种示例解释了弱属性和强属性之间的区别:


https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html#//apple_ref/doc/uid/TP40011210-CH5-SW3 [13]


在这里,作者已经在同一个地方收集了所有属性。它将有助于比较属性特征:


http://rdcworld-iphone.blogspot.in/2012/12/variable-property-attributes-or.html[14]

其它参考6


是默认值。只要存在指向它的强指针,对象就会保持活着。


指定不使引用对象保持Activity状态的引用。当没有对该对象的强引用时,弱引用设置为nil。

其它参考7


:基本上使用属性我们用来从/向另一个类获取或发送数据。
:通常所有插座,连接都是接口的弱类型。


Nonatomic :当我们不想将我们的插座或对象分成不同的同时线程时,这种类型的属性被用于。换句话说,Nonatomic实例使我们的属性处理一个线程时间。
希望它对你有所帮助。