[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


从零开始学Objective-C第一季

为了帮助广大同学学习iOS开发打好基础,我们智捷课堂推出了《从零开始学Objective-C》视频课程,本课程包括了:C语言基础、第一个Objective-C程序、Objective-C面向对象特性、继承与多态等概念。
  • 2016年05月17日 09:14

Objective-C中变量采用@property的各个属性值的含义

我们在OC中定义变量,可以自己来定义变量的setter方法来设置变量值,用getter方法来获取变量值。但是当变量数量增多时,还采用手动添加setter/getter方法来操作变量,就会使得程序代码量...
  • dqjyong
  • dqjyong
  • 2012-06-16 12:55:06
  • 22069

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

OC实例变量初始化方法 1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx 2 使用实例功能类方法,默认初始化方法 + setName:xxx age:...
  • chenglibin1988
  • chenglibin1988
  • 2013-05-19 09:38:37
  • 11966

Objective-c - block变量的声明和初始化

/*   Objective-c - block     1> block类型的变量的声明:           block:是一种数据类型,如同其他数据类型一样,...
  • xuezhangjun0121
  • xuezhangjun0121
  • 2017-01-11 17:17:34
  • 676

object-c定义属性与成员变量的区别

object-c定义属性与成员变量的区别:1、关于@synthesize object = _object: 我们经常这样写: @interface Class:NSObject{   ...
  • haxiao2015
  • haxiao2015
  • 2015-12-14 21:33:04
  • 648

object-c 多参数方法

一直被Object多参数方法迷惑,这下总算搞清楚了!!!lady gaga!!!!! 1.应该这么理解方法定义: -(void) setWord1:(NSString *) word1 setWo...
  • kaiqiangzhang001
  • kaiqiangzhang001
  • 2015-06-10 17:55:36
  • 3644

Objective-C基础之实例变量的默认值

Objective-C基础之实例变量的默认值
  • xujiandev
  • xujiandev
  • 2014-07-30 14:18:24
  • 2032

OC学习篇之---类的初始化方法和点语法的使用

昨天介绍了OC中类的定义和使用:http://blog.csdn.net/jiangwei0910410003/article/details/41657603,今天我们来继续学习类的初始化方法和点语...
  • u011032334
  • u011032334
  • 2014-12-18 13:08:09
  • 1122

Objective-C 属性

Object-C属性 @property (retain, nonatomic) UILabel titleLabel;   在objective-C中添加属性之前,通常会定义一些方法用于设...
  • iOS_PING
  • iOS_PING
  • 2016-12-25 01:04:24
  • 327

ios属性默认对应的变量

我们知道在objective-C 语言中,支持property的方式来为变量声明getset方法,那么...
  • mmoooodd
  • mmoooodd
  • 2014-10-14 16:31:57
  • 642
收藏助手
不良信息举报
您举报文章:[Objective-C] 哪些变量默认初始化为0
举报原因:
原因补充:

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