- 不要等到明天,明天太遙遠,今天就行動。
須讀:看完該文章你能做什么?
使用另外一種方式 初始化一個對象
SomeClass *object = [[SomeClass alloc] init];
學習前:你必須會什么?
new方法是用來干什么的,內部做了什么操作,如何使用new類方法創建一個對象
1.new方法是用于 一個類創建一個對象的類方法
2.內部做了三件事情
1.開辟存儲空間 + alloc 方法
2.初始化所有的屬性(成員變量) - init方法
3.返回對象的地址 offx16
3.SomeClass *object = [SomeClass new];
一、本章筆記
一、new 做了三件事情
1.開辟存儲空間 + alloc 方法
2.初始化所有的屬性(成員變量) - init方法
3.返回對象的地址
二、alloc
做了什么事情 : 1.開辟存儲空間, 2將所有的屬性設置為0 3.返回當前實例對象的地址
三、int
1.初始化成員變量,但是默認情況下 init的實現 是什么都沒有做 2.返回初始化后的實例對象的地址
四、為什么要用alloc init 初始化對象
建議大家以后創建一個對象 使用 alloc init ,這樣可以統一編碼格式
注意 : alloc返回的地址, 和 init返回地址 是同一個地址
二、code
main.m
#pragma mark 07-new實現原理
#pragma mark 概念
/*
一、new 做了三件事情
1.開辟存儲空間 + alloc 方法
2.初始化所有的屬性(成員變量) - init方法
3.返回對象的地址
二、alloc
做了什么事情 : 1.開辟存儲空間, 2將所有的屬性設置為0 3.返回當前實例對象的地址
三、int
1.初始化成員變量,但是默認情況下 init的實現 是什么都沒有做 2.返回初始化后的實例對象的地址
四、為什么要用alloc init 初始化對象
建議大家以后創建一個對象 使用 alloc init ,這樣可以統一編碼格式
注意 : alloc返回的地址, 和 init返回地址 是同一個地址
*/
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person.h"
#pragma mark - main函數
int main(int argc, const char * argv[])
{
/*
new 做了三件事情
1.開辟存儲空間 + alloc 方法
2.初始化所有的屬性(成員變量) - init方法
3.返回對象的地址
*/
// Person *p = [Person new];
// alloc 做了什么事情 : 1.開辟存儲空間, 2將所有的屬性設置為0 3.返回當前實例對象的地址
Person *p = [Person alloc];
// init 1.初始化成員變量,但是默認情況下 init的實現 是什么都沒有做 2.返回初始化后的實例對象的地址
Person *p2 = [p init];
// 注意 : alloc返回的地址, 和 init返回地址 是同一個地址
NSLog(@"p1 = %p,p2 = %p",p,p2);// p1 = 0x100204dd0,p2 = 0x100204dd0
#warning 為什么要用alloc init 初始化對象
// 建議大家以后創建一個對象 使用 alloc init ,這樣可以統一編碼格式
Person *p3 = [[Person alloc]init];
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@end
>>>.m
#import "Person.h"
@implementation Person
@end
day04_07_01(官方alloc).png
day04_07_02(官方init)1.png
day04_07_02(官方init)2.png