全局变量

[url]http://blog.ablepear.com/2009/12/objective-c-tuesdays-global-variables.html[/url]

任何声明在函数或者方法之外的变量都是全局变量:

int count1; // 全局

int main(int argc, char *argv[]) {
int count2; // main()中局部
...
}

[b]初始化:[/b]缺省情况下,全局变量初始化为0.对于指针类型(包括C字符串)NULL是默认值;对于Objective-C的对象指针,默认是nil.(这和局部变量不同,局部变量不保证有初始值,因此应该显示初始化.)

一个全局变量能在被定义时赋一个初始值,但有一个限制:初始值必须是编译器在编译时能计算得到值.通常,这意味着你只能使用字面值,像数字,字符和字符串,并且你只能使用基本的算术运算符.下面是一些全局变量初始化的例子:

int count; // defaults to 0
int daysPerYear = 365;
int secondsPerDay = 24 * 60 * 60;

不幸的是你不能调用函数或者方法或者使用其他的变量给一个全局变量赋初始值.下面是一些非法初始化赋值的例子:

// WARNING: WON'T COMPILE

// ERROR: function call not allowed
size_t titleLength = strlen("Objective-C Tuesdays");

// ERROR: method call not allowed
NSUInteger subtitleLength = [@"global variables" length];

// ERROR: calculation uses other global variables
unsigned long totalLength = titleLength + subtitleLength;

这个限制意味着全局Objective-C对象类型不能在声明时进行初始化:

// WARNING: WON'T COMPILE
NSArray *array = [[NSArray alloc] initWithObjects:@"one", @"two", nil];

只有一个例外:NSString全局变量能用Objective-C字符串初始化:

NSString *title = @"Objective-C Tuesdays";

如果你需要对全局变量做一些复杂的初始化,唯一的选择是程序开始的时候显示地初始化.通常有一些地方来做这些工作:
[list]
[*]main()函数的开始
[*]在你应用的代理的-init方法中
[*]在你应用的代理的-applicationDidFinishLaunching:方法中
[*]在你的classes的+initialize 方法中
[/list]
如果一个全局变量与一个特定的类相关,这个类的+initialize 方法是旋转相关代码的好地方.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值