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的称为逻辑右移。常见是算术,不能确保每台机器都是这样。
如果超出了移位限制,结果是未定义的。
大部分初始化工作以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的称为逻辑右移。常见是算术,不能确保每台机器都是这样。
如果超出了移位限制,结果是未定义的。
相关文章推荐
- objective-c基础教程——学习小结
- Objective-C 中类属性(修饰)
- 第三章:ObjectC循环
- javascript中object与{}的区别
- views_object / views_db_object
- 四、ObjectARX 修改对象的属性
- 关于SharePoint 的Client object model该何时load和execut query的一点自己的看法
- Object-C中的内存管理小记
- Java objectOutputStream的用法
- Downcast from'[NSObject:AnyObject]?'to'Dictionary<NSObject,AnyObject>'only unwraps
- Linq to object
- iOS常见错误2-CoreData: Cannot load NSManagedObjectModel.nil is an illegal URL parameter
- [Object-C]微博登陆遇见的坑
- BOM(Browser Object Model) 浏览器对象模型
- kobject结构分析
- [Object-C]第三方微信登陆需要"发短信"
- 基于 Objective-C OC的省市区代码(字典数组嵌套)
- instanceType和id的异同
- Objective - c随笔
- C++ 和 Object-c 混编时 提示的 class 错误