Fork me on GitHub

OC基础学习8:对象初始化

1 分配(allocation)对象

alloc方法干的事件:

1 从操作系统获得一块内存。
2 指定为存储对象的实例变量的位置。
3 对内存初始化:BOOL类型被初始化为:NOint类型被初始化为:0float类型被初始化为:0.0;所有指针被初始化为nil

  • 初始化对象
    init方法
    Car *car = [[Car alloc] init];

  • 初始化要做些什么

    1. CarParts程序中初始car对象是,init方法中创建engine对象和全部4个tire对象
    2. 懒性求值(lazy evaluation),只为engine对象和tire对象预留位置

2 便利初始化函数(convenience initializer)

以init开头的方法只是遵循命名约定的普通方法。
NSString类的初始化方法例子:

  • - (id) init;

    NSString *emptyString = [[NSString alloc] init];
    
  • - (instancetype)initWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);

    NSString *string = [[NSString alloc] initWithFormat:@"%d or %d", 1, 2];
    
  • - (nullable instancetype)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

    NSError *error = nil;
    NSString *string1 = [[NSString alloc] initWithContentsOfFile:@"/tmp/words.txt" encoding:NSUTF8StringEncoding error:&error];
    if (nil != error) {
        NSLog(@"未能读取文件数据:%@", [error localizedDescription]);
    }
    

3 指定初始化函数(designated initializer)

  • 类中的某个初始化方法被指派为指定初始化函数
  • 该类的所有初始化方法都使用指定初始化函数执行初始化操作
  • 子类使用期超类的指定初始化函数进行超类的初始化
  • 通常,接受参数最多的初始化方法是最终的指定的初始化函数
坚持原创技术分享,您的支持将鼓励我继续创作!
  • 本文标题: OC基础学习8:对象初始化
  • 本文作者: AndyRon
  • 发布时间: 2017年09月10日 - 23:50
  • 最后更新: 2018年09月19日 - 23:50
  • 本文链接: http://andyron.com/2017/oc-basic-8.html
  • 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!