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

@property个指向对象的指针声明中的strongweak有什么区别?

还有,nonatomic是什么意思?

推荐答案

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

相比之下,弱引用表示不想控制对象的生命周期.您正在弱引用的对象仅存在,因为至少有一个其他对象具有对它的强引用.一旦不再是这种情况,对象就会被销毁,而您的弱属性将自动设置为nil.iOS中最常见的弱引用用例有:

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

  2. 视图控制器主视图的子视图/控件,因为这些视图已被主视图牢牢控制.

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

Objective-c相关问答推荐

如何在情节提要中为视图控制器提供标识符?

UIAlertController:supportedInterfaceOrientations 被递归调用

Objective-C 静态、外部、公共变量

我需要在 ARC 中使用 dealloc 方法吗?

在 Objective C 中将属性标记为已弃用

在 Objective-C 中实现纯虚方法

performSelector 的返回值:

iOS 应用程序下一个键不会转到下一个文本字段

在 UILabel.attributedText *not* 蓝色和 *not* 下划线

增加推送通知徽章 iPhone

我可以以编程方式滚动到 UIPickerView 中所需的行吗?

try 标记应用程序图标但未获得用户标记应用程序的权限:iOS 8 Xcode 6

从 UIScrollView 中删除所有子视图?

强制iphone应用程序以编程方式重新启动?

如何以编程方式移动 UIScrollView 以集中在键盘上方的控件中?

如何推送两个视图控制器但只为第二个设置动画过渡?

Objective-C 中的同步和异步调用与多线程有什么区别?

将浮点数四舍五入到objective C中的下一个整数?

捕捉固定步数的 UISlider(如 iOS 7 设置应用程序中的文本大小)

目标 C:读取文本文件