1 分配(allocation)對象
alloc
方法干的事件:
1 從操作系統獲得一塊內存。
2 指定為存儲對象的實例變量的位置。
3 對內存初始化:BOOL
類型被初始化為:NO
;int
類型被初始化為:0
;float
類型被初始化為:0.0
;所有指針被初始化為nil
。
初始化對象
init
方法
Car *car = [[Car alloc] init];
-
初始化要做些什么
- CarParts程序中初始car對象是,init方法中創建engine對象和全部4個tire對象
- 懶性求值(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)
- 類中的某個初始化方法被指派為指定初始化函數
- 該類的所有初始化方法都使用指定初始化函數執行初始化操作
- 子類使用期超類的指定初始化函數進行超類的初始化
- 通常,接受參數最多的初始化方法是最終的指定的初始化函數