对象指针的@property声明中强属性和弱属性的区别是什么?

还有,非原子是什么意思?


当前回答

强:主要用于属性,我们用来从/发送数据到另一个类。 弱:通常所有的出口,连接从接口弱类型。

原子的:这种类型的属性在不希望将我们的出口或对象共享到同时存在的不同线程的情况下使用。换句话说,原子实例使我们的属性一次处理一个线程。 希望对你们有帮助。

其他回答

Strong是默认值。一个对象只要有一个强指针指向它,它就会保持“活动”。

Weak指定一个引用,该引用不保持被引用对象的活动状态。当没有对对象的强引用时,弱引用被设置为nil。

Strong:将传入值赋给它,它将保留传入值并释放实例变量的现有值

弱:将传入值赋给它而不保留它。

所以基本的区别是保留了新变量。 一般来说,你想要保留它,但也有你不想要它的情况,否则你会得到一个保留周期,不能释放对象的内存。如。Obj1保留obj2 obj2保留Obj1。要解决这种情况,可以使用弱引用。

强:主要用于属性,我们用来从/发送数据到另一个类。 弱:通常所有的出口,连接从接口弱类型。

原子的:这种类型的属性在不希望将我们的出口或对象共享到同时存在的不同线程的情况下使用。换句话说,原子实例使我们的属性一次处理一个线程。 希望对你们有帮助。

强弱,这些关键字围绕着Objective-C中的对象所有权展开

什么是对象所有权?

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

当一个方法(或函数)有一个指向一个对象的局部变量时,我们称这个变量拥有所指向的对象。 当一个对象有一个指向另一个对象的实例变量时,具有指针的对象被称为拥有被指向的对象。

每当指针变量指向一个对象时,该对象就有一个所有者,并且将保持活动状态。这就是所谓的强参考。

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

有一个详细的解释在这里揭秘@属性和属性

强引用(在大多数情况下都会用到)意味着你想“拥有”你用这个属性/变量引用的对象。编译器会注意,只要您使用强引用指向该属性,那么分配给该属性的任何对象都不会被销毁。只有当你将属性设置为nil时,对象才会被销毁(除非一个或多个其他对象也持有对它的强引用)。

相反,使用弱引用表示您不想控制对象的生命周期。弱引用的对象只能继续存在,因为至少有一个其他对象持有对它的强引用。一旦不再是这种情况,对象被销毁,你的弱属性将自动被设置为nil。在iOS中,弱引用最常见的用例是:

委托属性(通常弱引用以避免保留周期)和 视图控制器的主视图的子视图/控件,因为那些视图已经被主视图强持有。

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