Object-C 学习笔记

  1. 类的申明放在 .h 文件中,类的实现放在 .m 文件中

  2. 类分为可变类、不可变类
    2.1. 必须在不可变对象创建时,设置不可变对象的内容。不可变对象在创建后,对象的值不能被其它对象改变
    2.2. 可变对象的值,在对象创建之后,在运行时,可变对象的值可以被其它对象改变

  3. 继承是链式的,如果在类参考文档中,在某个类及它的父类中找不到某个方法,请根据继承链路逐一查找

  4. 类申明的关键字:interface

  5. 申明类的语法:

    @interface SimpleClass : NSObject 
     
    @end 
    
  6. 属性性质的申明在property关键字之后,在一对圆括号之间被指定,用于标识属性是否只读

  7. 方法申明:

    - (void)someMethodWithFirstValue:(SomeType)value1 secondValue:(AnotherType)value2; 
    
  8. 在应用或项目中(包括第三方类库),类名必须唯一

  9. 类方法申明:

    + (id)stringWithCString:(const char *)cString encoding:(NSStringEncoding)enc;
    
  10. 对象发送消息
    10.1 [someObject doSomething];

  11. id 关键字表示:某种对象类型

  12. 创建对象并初始化
    12.1

    XYZPerson *object = [XYZPerson new];
    

    12.2

    XYZPerson *object = [[XYZPerson alloc] init];
    
  13. 字面值也可以创建对象

    NSString *someString = @"Hello, World!";
    NSNumber *myBOOL = @YES;
    NSNumber *myFloat = @3.14f;
    NSNumber *myInt = @42;
    NSNumber *myLong = @42L;
    
  14. 对象比较
    14.1 比较两个指针是否指向同一对象

    if (firstPerson == secondPerson) {
        // firstPerson is the same object as secondPerson
    }
    

    14.2 判断两个对象是否表示同一个值

    if ([firstPerson isEqual:secondPerson]) {
        // firstPerson is identical to secondPerson
    }
    

    14.4 某些类(如:NSString,NSNumber,NSDate)可以使用方法比较大小

    if ([someDate compare:anotherDate] == NSOrderedAscending) {
        // someDate is earlier than anotherDate
    }
    
  15. nil 说明
    15.1 初始化数量值时,如果不赋初值,请把它设置为 nil,否则,变量里会有前一个堆留下的垃圾值
    15.2 对象指针不需要设置 nil,因为如果你不给它设置初始值,编译器会帮你把它设置为 nil
    15.3 给 nil 发送消息是安全的,如果你给 nil 发送消息,实际上,什么也不会发生
    15.4 判断对象是否为 nil 的两种方式
    if (object == nil)
    if (!object)

  16. 访问器(accssor)—— 编译器自动生成
    16.1 用于访问值的方法(getter 方法)拥有与属性一样的名字
    16.2 用于设置值的方法(setter 方法)用 set 开头的单词命名,并且,其中的属性名首字母要大写

  17. 属性特征词
    17.1 只读

    @property (readonly) NSString *fullName;
    

    17.2 设置访问器格式

    @property (getter=isFinished) BOOL finished;
    
  18. 用category(类目)对现有类添加方法
    18.1 定义

    #import "XYZPerson.h"
    @interface XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString;
    @end
    

    18.2 实现

    #import "XYZPerson+XYZPersonNameDisplayAdditions.h"
    @implementation XYZPerson (XYZPersonNameDisplayAdditions)
    - (NSString *)lastNameFirstNameString {
        return [NSString stringWithFormat:@"%@, %@", self.lastName, self.firstName];
    }
    @end
    

    18.3 为了避免未定义的行为(类目里的方法名与被扩展类中的已有方法名重名),最佳的做法是给类目中的方法名称前添加一个前缀

  19. 用extension来实现类的扩展
    19.1 类扩展在编译时,只能被添加到已有源代码的一类中
    19.2 类扩展的方法申明在原始类的 @implementation 块中
    19.3 语法

    @interface ClassName ()
    
    @end
    
  20. 协议(protocol)定义消息传递合同
    20.1 一个协议声明的方法和属性,独立于任何特定的类
    20.2 接口和数据源属性通常标记为弱(week
    20.3 使用 @optional 指令把协议的方法标识为可选。@optional 指令适用于遵循它的任何方法 ,直到协议定义的最后,或者遇到另一个指令之前,例如 @required

    @protocol XYZPieChartViewDataSource
    - (NSUInteger)numberOfSegments;
    - (CGFloat)sizeOfSegmentAtIndex:(NSUInteger)segmentIndex;
    @optional
    - (NSString *)titleForSegmentAtIndex:(NSUInteger)segmentIndex;
    - (BOOL)shouldExplodeSegmentAtIndex:(NSUInteger)segmentIndex;
    @required
    - (UIColor *)colorForSegmentAtIndex:(NSUInteger)segmentIndex;
    @end
    
  21. 使用 NSNull 代替 nil
    21.1 不能在集合中添加 nil,因为在 Object-C 中,nil 表示没有对象,集合中需要使用 NSNull

    NSArray *array = @[ @"string", @42, [NSNull null] ];
    

你可能感兴趣的:(Object-C 学习笔记)