[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


相关文章推荐

Java基础知识

1.sychronized和lock区别 答: sychronized基于JVM层实现,Lock基于代码层实现 sychronized性能高于ReentrantLock sychronized可以同步...

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

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

使用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——类、方法、属性、成员变量

有过相关编程语言基础,了解C++/java的相信对类的类、对象等概念是了解的。在此我也不做过多地赘述。      关于OC中类的定义及方法使用这块,OC定义了一套自己的规范 类的定义:        ...

Objective-C Runtime 运行时之二:成员变量与属性

在前面一篇文章中,我们介绍了Runtime中与类和对象相关的内容,从这章开始,我们将讨论类实现细节相关的内容,主要包括类中成员变量,属性,方法,协议与分类的实现。 原文:http://www.c...

Objective-C 内存管理之dealloc方法中变量释放处理

(一).关于nil http://cocoadevcentral.com/d/learn_objectivec/ Calling Methods on Nil In Objective-C, t...

Objective-C——类、方法、属性、成员变量

转载:http://www.elsyy.com/news/2014/1017/19355532620.html关于OC中类的定义及方法使用这块,OC定义了一套自己的规范 类的定义 @interfa...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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