Objective-C 学习笔记
On 2014-08-24 18:54:15 By SoliObjective-C 学习笔记
@(我的笔记)[Objective-C|XCode|Mac]
此为在学习《Objective-C程序设计(第4版)》时摘抄的笔记。只记录了需要知道或者记住的知识点,不包含那些复杂的概念或细节的使用方法或接口。
- 左移:高位丢弃,低位补 0。
右移:低位丢弃,高位:
- 无符号数值高位补 0;
- 有符号数
- 正数高位补 0;
- 负数(符号位为 1)
- 有的计算机为算术右移(高位补 1)
- 有的计算机为逻辑右移(高位补0)
移位运算如果要移的位数大于或等于实际的位数(如对64位整数左移或右移64位或更多),或要移的位数为负数,此为未定义行为。
#define
:预定义值的本身可以引用另一个预定义的值,并且顺序可以颠倒。只要在使用预定义名称时,所有的符号已经是定义过的。比如:
#define PI2 PI * PI #define PI 3.14 int a = PI2;
以上是合法的。但下面就不是:
#define PI2 PI * PI int a = PI2; #define PI 3.14
初始化数组
通过将元素编号放在大括号中,可以以任意顺序初始化指定的数组元素:
int x = 123; int a[] = {[9] = x + 1, [2] = 3, [1] = 2, [0] = 1 };
其中,a 为含有 10 个元素的数组,因为上面给出的最大索引为 9 。
初始化结构体
在初始化列表中,可以用以下方式以任意顺序初始化结构体中的指定成员:
struct date { int year; int month; int day; } struct date today = { .day = 6, .year = 2014, .month = 8 };
NSInteger
不是一个对象,而是基本数据类型的typedef
。它实际上是 64 位的 long 或 32 位的 int 。所以定义时不应用
*
:NSInteger myInt; NSLog(@"%li", (long)myInt);
为确保值能正确传递并正确显示,应该用
%li
格式化。NSUInteger
也是类似的typedef
,表示无符号整数。NSNumber 的
numberWithInt:
和numberWithInteger:
使用有些差别,遵循以下规则:- 如果使用
numberWithInt:
方法创建一个整数,需要使用intValue
获取它的值,使用%i
作为格式化字符串显示它的值; - 如果使用
numberWithInteger:
方法创建一个整数,需要使用integerValue
,也可以转换成 long 显示或者使用stringWithFormat:
将它格式化字符串。使用%li
作为格式化字符串。
- 如果使用
NSLog
格式字符%@
不仅可以显示NSString
对象,还可以显示其他对象。通过覆盖继承的
- (NSString *)description
方法,还可以使用%@
显示你自己的类对象。数组中各元素不必是相同类型。
FileHandle
类并没有提供创建文件的功能,必须使用FileManager
方法来创建文件。在 UNIX 系统下编程,打开文件进行写入并不会截断文件,需要自己完成截断。属性默认不是 strong ,其默认特性是 unsafe_unretained (相当于 assign )。