您的位置:首页 > 移动开发 > Objective-C

Objective-C 程序设计 第十章

2015-11-11 11:45 253 查看
变量和数据类型

大部分初始化工作以init开头。

常用重载init函数的“模版”

- (instancetype) init

{

self = [super init];

if (self) {

//init code here

}

return self;

}

注意:super是父类。

返回instancetype,防止子类继承下去,导致init错误。

如重载init,将整型实例变量初始化为0。

Fraction *a = [Fraction alloc] initWith : 10 over: 3];

这样单独添加一个带参数的初始化函数也可以。

init编写时的函数返回值instancetype,这是编写可能会被继承的类init方法的一般规则。

作用域回顾

@synthesize window=_window;

表示合成属性window的取值和设值方法,并将属性与实例变量_window (并未显性声明) 关联起来。

属性:window,实例变量_window.

可以通过self.window来访问。

在类内部也可以使用[_window visible];但不能[window visible];

在实现部分声明实例变量(使用@synthesize指令隐性声明的实例变量)是私有的

无法在子类中使用,但是可以继承父类的存取方法来进行访问。

只要在属性中声明过它们后,编译器即使不用@sythesize指令也会生成这些方法。@property

全局变量

按照惯例,使用小写的g开头。

定义一个全局变量,其它文件也可以访问。外部全局变量。

在需要访问的模块中使用extern进行声明就可以使用。

只允许一处定义,允许多处声明。

声明不会引起变量存储空间分配,而定义会引起变量存储空间的分配。

可以在其它文件中某个函数中单独声明,也可以在文件内统一声明。分需求。

静态变量

外部全局变量+静态变量 = 全局变量。

全局变量会破坏封装,不如封装到某个类中。

使用static将全局变量限制在本文件内。

作用范围:声明后的文件部分。

用途:类方法中可以设定和访问一些变量,使用静态变量非常合适。

尽量不要冲在alloc函数,其中有处理内存的物理分配。可以封装一个allocABCD来用。

+ (Fraction *) allocABCD

{

extern int gCounter;

++gCounter;

return [Fraction alloc];

}

枚举数据类型

enum,跟C语言的类似。

Objective -C 编译器实际上将枚举标识符作为整型常量来处理。

可以明确地给枚举类型的变量赋予一个整数值,应该使用类型转换运算符。

lastMonth = (enum month) (monthValue - 1);

枚举类型提供了一种方法:可以使你能把整型值和有象征意义的名称对应起来。

typedef

跟C语言类似,常和结构体,枚举一起使用。

数据类型转换

转换规则,1. long double,double,float,(Bool、char、short int、bit field或枚举类型 -> int),

long long int , long int, int.

按照这个顺序考虑转换,其中转成int这个动作不能结束,继续执行。其它的转换后即可以结束了。

位运算法。

~,&,|, ^, <<, >>

跟C语言类似。

其中右移:有符号数要注意:符号位为0,则补充0.

符号位为1,补充1的称为算术右移。补充0的称为逻辑右移。常见是算术,不能确保每台机器都是这样。

如果超出了移位限制,结果是未定义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: