我是objective-c的新手。
我有 2 个不相关的问题。
- 创建实例变量或属性时必须经过哪些过程?比如我一般在interface部分定义变量,然后给它创建一个属性,然后合成,然后在viewUnload部分设置为nil。
即使我为它创建了一个属性,我是否必须在接口部分定义变量?何时必须在 viewUnload 部分将变量设置为 nil?
- 定义属性时,强、弱、非原子、原子、分配等有什么区别?我什么时候应该强,弱,非原子,原子,分配等?
我是objective-c的新手。
我有 2 个不相关的问题。
即使我为它创建了一个属性,我是否必须在接口部分定义变量?何时必须在 viewUnload 部分将变量设置为 nil?
创建实例变量或属性时必须经过哪些过程?
合成一个属性是声明它的ivar,并定义访问器方法,而不是分配和初始化它。您需要在适当的时间点对其进行初始化(通常在对象实例的初始化过程中,-init*
或者在视图即将显示之前,例如在 中-viewDidLoad
)。
定义属性时,强、弱、非原子、原子、分配等有什么区别?我什么时候应该强,弱,非原子,原子,分配等?
strong、weak、assign 是改变对象实例引用方式的修饰符。请参阅自动引用计数的文档。(维基百科和Apple 的文档)
非原子和原子是改变访问器合成方式的修饰符。请参阅this的声明属性部分。
即使我为它创建了一个属性,我是否必须在接口部分定义变量?
不。就目前而言,您不需要这样做,因为最新 SDK 中的编译器会为您完成这些工作。例如,如果您声明了一个属性:@property (strong, nonatomic) NSData *data1;
,那么您将NSData *_data1
免费获得 ivar,即使您省略了 @synthesize 语句。
何时必须在 viewUnload 部分将变量设置为 nil?
不,顺便说一句,-viewDidUnload
在 iOS 6.0 中已弃用。