Objective-C 学习笔记

@(我的笔记)[Objective-C|XCode|Mac]

此为在学习《Objective-C程序设计(第4版)》时摘抄的笔记。只记录了需要知道或者记住的知识点,不包含那些复杂的概念或细节的使用方法或接口。

  1. 左移:高位丢弃,低位补 0。
  2. 右移:低位丢弃,高位:

    • 无符号数值高位补 0;
    • 有符号数
      • 正数高位补 0;
      • 负数(符号位为 1)
      • 有的计算机为算术右移(高位补 1)
      • 有的计算机为逻辑右移(高位补0)
  3. 移位运算如果要移的位数大于或等于实际的位数(如对64位整数左移或右移64位或更多),或要移的位数为负数,此为未定义行为。

  4. #define:预定义值的本身可以引用另一个预定义的值,并且顺序可以颠倒。只要在使用预定义名称时,所有的符号已经是定义过的。

    比如:

    #define PI2    PI * PI
    #define PI      3.14
    
    int a = PI2;
    

    以上是合法的。但下面就不是:

    #define PI2    PI * PI
    
    int a = PI2;
    
    #define PI      3.14
    
  5. 初始化数组

    通过将元素编号放在大括号中,可以以任意顺序初始化指定的数组元素:

    int x = 123;
    int a[] = {[9] = x + 1, [2] = 3, [1] = 2, [0] = 1 };
    

    其中,a 为含有 10 个元素的数组,因为上面给出的最大索引为 9 。

  6. 初始化结构体

    在初始化列表中,可以用以下方式以任意顺序初始化结构体中的指定成员:

    struct date
    {
       int year;
       int month;
       int day;
    }
    
    struct date today = { .day = 6, .year = 2014, .month = 8 };
    
  7. NSInteger 不是一个对象,而是基本数据类型的 typedef 。它实际上是 64 位的 long 或 32 位的 int 。

    所以定义时不应用 *

    NSInteger myInt;
    
    NSLog(@"%li", (long)myInt);
    

    为确保值能正确传递并正确显示,应该用 %li 格式化。

    NSUInteger 也是类似的 typedef ,表示无符号整数。

  8. NSNumber 的 numberWithInt:numberWithInteger: 使用有些差别,遵循以下规则:

    • 如果使用 numberWithInt: 方法创建一个整数,需要使用 intValue 获取它的值,使用 %i 作为格式化字符串显示它的值;
    • 如果使用 numberWithInteger: 方法创建一个整数,需要使用 integerValue ,也可以转换成 long 显示或者使用 stringWithFormat: 将它格式化字符串。使用 %li 作为格式化字符串。
  9. NSLog 格式字符 %@ 不仅可以显示 NSString 对象,还可以显示其他对象。

    通过覆盖继承的 - (NSString *)description 方法,还可以使用 %@ 显示你自己的类对象。

  10. 数组中各元素不必是相同类型。

  11. FileHandle 类并没有提供创建文件的功能,必须使用 FileManager 方法来创建文件。在 UNIX 系统下编程,打开文件进行写入并不会截断文件,需要自己完成截断。

  12. 属性默认不是 strong ,其默认特性是 unsafe_unretained (相当于 assign )。

Creative Commons License Except where otherwise noted, content on this site is licensed under a Creative Commons Attribution 4.0 International license .