我有一个NSObject类,它有一些原始属性:
@interface MyClass: NSObject
@property (nonatomic, assign) BOOL boolProp;
@property (nonatomic, assign) NSInteger intProp;
@end
@implementation MyClass
// No init implemented
@end
根据我的经验,当没有init方法时,属性默认为“合理”值(BOOL
到NO
,intProp
到0
)。这是定义的行为吗?如果是,是否有针对此行为的Apple文档?
答案 0 :(得分:2)
默认情况下,实现背后的结构(C结构)整体设置为0。想象一下使用memset(self, 0, sizeof(_type))
。所有其余的只是类型转换。这意味着所有指针都是Null
,所有整数或其他数字都是0
,所有布尔值都是0
,NO
或false
。
我不确定是否有关于它的文档,但如果是,则它在NSObject
的分配级别。这些默认值通常是描述它的方式,但实际上可能并不意味着它们是保证的。我的意思是,虽然将all设置为零的功能正在起作用,但对于某些旧版本或某些未来版本,此行为仍有可能不正确。 (除非事实上记录了这种行为)。
还应该注意的是,正如所说的结构本身的内存设置为零所以没有调用setter来将事物置零,无论你如何设置你的类,都不会执行逻辑。
答案 1 :(得分:1)
对于Apple文档检查Object Initialization。它提到了你问题中提出的主题。例如
在分配期间对实例变量执行的默认设置为零通常就足够了