Objective-C学习笔记1
2015-10-20 15:22
441 查看
这几篇笔记是读《objective-C基础教程(Learn
Objective-C on the Mac For OS X and
IOS)》(第二版)做的笔记。主要是一些读书时遇到的疑惑,都是自己的理解,不一定正确,纪录下来方便以后查阅,内容比较基础,对刚入门IOS的朋友也许有些帮助。
1,关于BOOL类型:
书第14页(P14),方框里的说明中举了一个例子,当把整数8960赋给BOOL类型时会被认为是NO。这是因为BOOL在OC中其实就是一个8位的signed
char,而8960的低八位刚好为0.
这里我们要注意OC中BOOL和bool的区别。
首先看一下BOOL的定义:
typedef signed char BOOL;
#define YES (BOOL) 1
#define NO (BOOL) 0
objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和
NO 值只是在习惯上的一种理解。而bool类型则跟c一样,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是
NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true,因为bool类型,非0即为true。
同样需要注意的还有P16中举的例子,最好不要直接拿BOOL值跟YES进行对比,因为BOOL类型并非只有YES和NO两个值。
2.关于OC中的“虚函数”:
虚函数其实是C++中的概念,以实现类的多态性,而P53继承的工作机制这一节中提到的特性其实跟虚函数的机制很相似,可以说OC中所有类函数(方法)都是虚函数,在当前类中能找到实现方法的直接调用该方法,只有当找不到对应的方法的时候才会往上一层去寻找对应方法。当然也可以通过使用super来调用父类方法。
3,关于复合与继承:
P70底下有一段写的很好,继承并不是万能的,不要什么都第一时间想到继承,有时候复合更加适合。
4.NSString的初始化
NSString变量主要有下面3种常用的定义方式:
//简单的定义
NSString *aString = @"NSString创建的对象";
//不需要分配内存空间和初始化
NSString *tt = [NSString stringWithFormat:@"hello"];
//需要分配内存空间和初始化,使用完后需要release 释放
NSString *pp = [[NSString alloc]initWithFormat:@"hello"];
前面两种都不需要手动释放内存,后面两种可能新手会混淆,第二种是类方法,第三种是实例方法,第二种可以看出是第三种加多一句autorelease,所以不需要手动release内存,而第三种则需要手动释放。
具体可以看:http://www.isaced.com/post-240.html
5,关于NSArray的初始化:
P116种提到两种初始化方法:
NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
NSArray *array2 =
@[@"1",@"2",@"3"];
这两种方法都可以,但是第二种不需要在结尾加nil。
当然还有下面两种方法:
NSArray *array3 = [NSArray arrayWithObject:@"1"];
//单个元素,不常见
NSArray *array4 = [NSArray arrayWithArray:array2];
还要注意NSArray只能存储Objective-C对象,而不能存原始C语言的数据类型,如int,float等。
Objective-C on the Mac For OS X and
IOS)》(第二版)做的笔记。主要是一些读书时遇到的疑惑,都是自己的理解,不一定正确,纪录下来方便以后查阅,内容比较基础,对刚入门IOS的朋友也许有些帮助。
1,关于BOOL类型:
书第14页(P14),方框里的说明中举了一个例子,当把整数8960赋给BOOL类型时会被认为是NO。这是因为BOOL在OC中其实就是一个8位的signed
char,而8960的低八位刚好为0.
这里我们要注意OC中BOOL和bool的区别。
首先看一下BOOL的定义:
typedef signed char BOOL;
#define YES (BOOL) 1
#define NO (BOOL) 0
objective-c 并不会将BOOL作为仅能保存YES或NO值的真正布尔类型来处理。编译器仍将BOOL认作8位二进制数,YES 和
NO 值只是在习惯上的一种理解。而bool类型则跟c一样,只有true和false的区别,即0为false,非0为true。
举例:
BOOL b1=8960; // 实际是
NO,因为8960换成十六进制为0x2300,BOOL 只有8位存储空间,取0x2300的低8位,00,所以是NO
bool b2=8960;//实际是true,因为bool类型,非0即为true。
同样需要注意的还有P16中举的例子,最好不要直接拿BOOL值跟YES进行对比,因为BOOL类型并非只有YES和NO两个值。
2.关于OC中的“虚函数”:
虚函数其实是C++中的概念,以实现类的多态性,而P53继承的工作机制这一节中提到的特性其实跟虚函数的机制很相似,可以说OC中所有类函数(方法)都是虚函数,在当前类中能找到实现方法的直接调用该方法,只有当找不到对应的方法的时候才会往上一层去寻找对应方法。当然也可以通过使用super来调用父类方法。
3,关于复合与继承:
P70底下有一段写的很好,继承并不是万能的,不要什么都第一时间想到继承,有时候复合更加适合。
4.NSString的初始化
NSString变量主要有下面3种常用的定义方式:
//简单的定义
NSString *aString = @"NSString创建的对象";
//不需要分配内存空间和初始化
NSString *tt = [NSString stringWithFormat:@"hello"];
//需要分配内存空间和初始化,使用完后需要release 释放
NSString *pp = [[NSString alloc]initWithFormat:@"hello"];
前面两种都不需要手动释放内存,后面两种可能新手会混淆,第二种是类方法,第三种是实例方法,第二种可以看出是第三种加多一句autorelease,所以不需要手动release内存,而第三种则需要手动释放。
具体可以看:http://www.isaced.com/post-240.html
5,关于NSArray的初始化:
P116种提到两种初始化方法:
NSArray *array1 = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
NSArray *array2 =
@[@"1",@"2",@"3"];
这两种方法都可以,但是第二种不需要在结尾加nil。
当然还有下面两种方法:
NSArray *array3 = [NSArray arrayWithObject:@"1"];
//单个元素,不常见
NSArray *array4 = [NSArray arrayWithArray:array2];
还要注意NSArray只能存储Objective-C对象,而不能存原始C语言的数据类型,如int,float等。
相关文章推荐
- hibernate执行的SQL语句返回的list集合用Object[]接收遍历
- 【Objective-C】空指针和野指针
- android intent传递HashMap<String, Object>
- Objective-C 的Foundation库总结
- NSString, NSMutableString, NSNumber----OC第四天
- QtCore.QMetaObject.connectSlotsByName:根据objectName和signal自动绑定slot
- ObjectAnimator设置动画
- 利用Object中的key的唯一性去除数组的重复项
- Array.prototype.push结合apply 实现 object 伪装数组
- 3. HashMap和JSONObject用法
- Java Object equals方法
- Swift 引入 Object-c 代码
- 经验随笔objective-C
- Object类有哪些公用方法?
- Object.create()兼容实现方法
- 法线从object space到eye space的转换((normal matrix)
- wait(),notify(),notifyAll()用来操作线程为什么定义在Object类中
- enumerateObjectsUsingBlock的使用问题记录
- 第二章 object-c
- iPad 多屏处理