Objective-C中基本属性的默认值

时间:2018-03-22 11:01:39

标签: ios objective-c properties

我有一个NSObject类,它有一些原始属性:

MyClass.h

@interface MyClass: NSObject

@property (nonatomic, assign) BOOL boolProp;
@property (nonatomic, assign) NSInteger intProp;

@end

MyClass.m

@implementation MyClass

// No init implemented

@end

根据我的经验,当没有init方法时,属性默认为“合理”值(BOOLNOintProp0)。这是定义的行为吗?如果是,是否有针对此行为的Apple文档?

2 个答案:

答案 0 :(得分:2)

默认情况下,实现背后的结构(C结构)整体设置为0。想象一下使用memset(self, 0, sizeof(_type))。所有其余的只是类型转换。这意味着所有指针都是Null,所有整数或其他数字都是0,所有布尔值都是0NOfalse

我不确定是否有关于它的文档,但如果是,则它在NSObject的分配级别。这些默认值通常是描述它的方式,但实际上可能并不意味着它们是保证的。我的意思是,虽然将all设置为零的功能正在起作用,但对于某些旧版本或某些未来版本,此行为仍有可能不正确。 (除非事实上记录了这种行为)。

还应该注意的是,正如所说的结构本身的内存设置为零所以没有调用setter来将事物置零,无论你如何设置你的类,都不会执行逻辑。

答案 1 :(得分:1)

对于Apple文档检查Object Initialization。它提到了你问题中提出的主题。例如

  

在分配期间对实例变量执行的默认设置为零通常就足够了