[Objective-C] 哪些变量默认初始化为0

转载 2015年07月07日 09:25:20

参考:

http://stackoverflow.com/questions/1786781/are-instance-variables-set-to-nil-by-default-in-objective-c

https://developer.apple.com/library/mac/documentation/General/Conceptual/CocoaEncyclopedia/ObjectAllocation/ObjectAllocation.html#//apple_ref/doc/uid/TP40010810-CH7-SW1

http://stackoverflow.com/questions/990817/are-ints-always-initialized-to-0


1) Objective-C中,类的非静态 变量(class instance variable 或 ivar)默认都是初始化成0,由编译器保证,无需程序员自己手工初始化成0

Object Allocation 中提到:

An allocation message does other important things besides allocating memory:

  • It sets the object’s 

    retain count to one.
  • It initializes the object’s isainstance variable to point to the object’s class, a runtime object in its own right that is compiled from the class definition.

  • It initializes all other instance variables to zero (or to the equivalent type for zero, such as nilNULL, and 0.0).

Programming With Objective-C 中提到:

The alloc method has one other important task, which is to clear out the memory allocated for the object’s properties by setting them to zero. This avoids the usual problem of memory containing garbage from whatever was stored before, but is not enough to initialize an object completely.

2) 对全局变量上述规则也同样适用,即全局变量也会默认初始化成0

// At global scope
int a_global_var;  // guaranteed to be 0
NSString *a_global_string;  // guaranteed to be nil

【一些特例】

  • 局部变量(local variable)不会默认初始化成0 【yasi】在 XCode 6.1. 中试验的结果貌似不是这样的,即,local variable 也会默认初始化成0,建议对于 local variable 显式手工初始化成 nil
  • 由 malloc() 或 realloc() 分配的变量不会默认初始化成0。注意:calloc() 分配的变量会显示初始化为0

【一些建议】


1) 根据 Transitioning to to ARC Release Notes当 ARC 启用时,stack variables 会隐式地初始化成 nil

Stack Variables Are Initialized with nil

Using ARC, strong, weak, and autoreleasing stack variables are now implicitly initialized with nil


然而,建议对 stack variables 保持手工初始化 nil 的习惯

2) 不要忘记,C++ 对象,以及在 Objc 中混用的 C++对象,仍然保持 C++ 的对象成员初始化规则,即 C++ 类成员变量不会默认初始化成0


Stack Variables Are Initialized with nil

Using ARC, strong, weak, and autoreleasing stack variables are now implicitly initialized with nil


C变量默认值

如果是全局变量,所有的全局变量都赋零,字符变量都赋NULL即0.指针变量也是NULL。即全部变量都自动初始化了。 如果是局部变量,所有的变量都不初始化,因此为随机数。如果不赋值就使用,很危险。需要先...

[Object-C]OC实例变量初始化方法

OC实例变量初始化方法 1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx 2 使用实例功能类方法,默认初始化方法 + setName:xxx age:...

C++内置类型的成员变量初始值的问题探讨

最近碰到个问题,C++内置类型的成员变量(如int)的默认初始值到底是多少? 我的开发环境:VIN7 64位,VS2010。 测试代码: class Solution { public: int a...

iOS开发之Warning浅谈

Warning 对于一个coding有洁癖的人来说,warning在他们眼中和error没什么区别,就像是一口痰卡在喉咙中,吐不出来,咽不下去,甚是难受。 我虽然不是一个“处女座”特性的人,但是在项目...

一个有趣的排序算法—睡眠排序

今天看到了这么一个排序方法,是感觉有点好玩,它的基本思想是:主要是根据CPU的调度算法实现的,对一组数据进行排序,不能存在负数值,这个数是多大,那么就在线程里睡眠它的10倍再加10,不是睡眠和它的数值...

使用Objective-C的+(void)initialize初始化static变量

在《Objective C类方法load和initialize的区别》一文中,我介绍了Objective-C对待+(void)initialize和+(void)load两个方法在编译和执行时出现的不...

objective-c 成员变量没初始化所造成的灾难

以下是我所想要得到的效果: 但我实际得到的却是这么个玩意儿: 找了很久很久,起初还以为是弄乱了opengl的状态机, 但是其他元素的渲染却并没有出什么问题啊,...

Objective-C之成魔之路【0-序章】

重开发者的劳动成果,请勿转载 C语言首创于AT&T实验室, UNIX OS的发展促进了C语言的快速普及,UNIX OS几乎完全是由C语言编写的。 Brad J.Cox在20世纪80...

Objective-C代码,最终会被转换为机器代码 —— 由ARM处理器能识别的1和0组成

我们写的Objective-C代码,最终会被转换为机器代码 —— 由ARM处理器能识别的1和0组成。实际上,在机器代码之间,还有一门人类可以阅读的语言 —— 汇编语言。   了解汇编,可以深...
  • xlsn0w
  • xlsn0w
  • 2016年03月09日 13:55
  • 219

Objective-C 里指针变量星号 * 你会放在哪个位置

Objective-C 里指针变量星号 * 你会放在哪个位置 2011-06-17 — Unmi 话说在 Objective-C 里声明指针变量时,星号(*) 该放到哪个位置,是紧贴变量类型,紧...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Objective-C] 哪些变量默认初始化为0
举报原因:
原因补充:

(最多只允许输入30个字)