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 )。
Except where otherwise noted, content on this site is licensed under a
Creative Commons Attribution 4.0 International license
.