Objective-C基础类型属性默认值是否为定义行为及官方文档查询
关于NSObject子类未实现init时属性默认值的问题
这确实是苹果明确定义的标准行为,完全可以放心依赖,不用担心中途出现变化。
背后的原因
当你没有给MyClass自定义init方法时,系统会自动调用NSObject的默认init实现。而这个默认初始化流程,会确保对象的所有实例变量(包括@property自动生成的_boolProp、_intProp这类底层变量)被初始化为零值:
BOOL类型的零值对应NO(因为Objective-C里BOOL本质是字符类型,0就代表NO)NSInteger作为整数类型,零值就是0
其实更准确地说,在alloc阶段,系统就已经把分配给对象的内存块全部置零了,默认的init方法不会修改这个状态,所以这些属性从一开始就有了零对应的默认值。
官方文档的佐证
苹果在官方的Objective-C编程指南里明确说明了这个行为:
NSObject的默认初始化操作会保证对象的所有实例变量都被初始化为合适的零值,即便你没有在自定义的init方法里显式设置它们。
另外,在《Objective-C Runtime Programming Guide》中也提到了对象内存分配时的置零操作,这是默认初始化行为的基础。
内容的提问来源于stack exchange,提问作者peco
相关产品推荐
相关产品推荐

