內(nèi)存管理:
1.管理內(nèi)存的分配和釋放
1)分配:alloc new copy分配內(nèi)存
2)釋放:release
2.什么時候下會釋放內(nèi)存?
當(dāng)計數(shù)器值為0時會自動釋放內(nèi)存.
3.怎么證明對象即將被釋放?
重寫dealloc方法,要求:必須調(diào)用回父類的dealloc方法
4.內(nèi)存管理的原則:
誰創(chuàng)建,誰釋放.
誰retain 誰release
5.set的方法的內(nèi)存管理方式
- (void)setCat:(Cat *)cat
{
if(_cat != cat)
{
[_cat release];
_cat = [cat retain];
}
}
@property的標(biāo)準格式和參數(shù)
1)格式:
@property (參數(shù)1,參數(shù)2)成員變量類型 成員變量名稱(去掉下劃線);
2)參數(shù):
nonatomic:非原子性,線程不加鎖,性能高,安全性低
atomic:原子性,線程加鎖,性能低,安全性高.
retain:用于對象類型,生成set方法的內(nèi)存管理代碼.
assign:用于基本數(shù)據(jù)類型,不生成內(nèi)存管理代碼,直接進行賦值操作.
readwrite:可讀可寫.
readonly:只讀
setter:更改set方法的名字,注意:setter:
getter:更改get方法的名字.
@class
簡單的聲明一個類
跟#import的區(qū)別:
import引入文件里面所有的內(nèi)容,包括成員變量和方法.
@class僅僅告訴編譯器,它修飾的是一個類而已.
建議.h文件當(dāng)中使用@class
1艘儒、對象的自動釋放池的作用
autorelease對象方法
@autoreleasepool關(guān)鍵字的使用
Person *p = [Person new];
@autoreleasepool{
[p autorelease];
}
+ (instancetype)person{
return [[[ self alloc] init] autorelease];
}
Person *p = [Person person];
//封裝一個initWithXxx方法, 在其中使用"對象自動釋放池"
- ARC介紹
- ARC概念介紹
- ARC的判斷原則/強弱指針介紹
- 循環(huán)strong問題
- MRC代碼轉(zhuǎn)ARC代碼
ARC項目如何兼容MRC的代碼
項目---> 編譯選項 ---->雙擊類文件----> -fno-objc-arc
MRC項目轉(zhuǎn)換為ARC
MRC項目轉(zhuǎn)換為ARC
- @autoreleasepool的嵌套使用(棧方式來存儲)
- instancetype只能用作返回值, 不能使用instancetype來聲明變量 * id 和 instancetype 的區(qū)別
/*
id -> NSObject * id obj; id類型是可以用來聲明變量的
instancetype -> 在哪個類中, 表示的就是哪個類型的指針 XXXX * instancetype 只能用作方法的返回值, 不能通過instancetype來聲明變量 */ - 自動釋放池是以棧結(jié)構(gòu)來存儲的
3浮梢、 Category分類
- 分類的作用:
1> 將一個類中的不同方法分到多個不同的文件中存儲, 便于對類進行模塊化設(shè)計僧凤、團隊合作
開發(fā)深浮。
2> 可以在不修改原來類的基礎(chǔ)上, 為這個類擴充一些方法. - 分類中只能增加"方法", 不能增加成員變量等。
//原類
@interface Person:NSObject {
int _age; }
@end
@implementation Person {
int _weight; //私有的成員變量 }
-(void)setAge:(int)age{
} -(int)age{
}
}
@end //分類
@interface Person (base)
@property int age; //相當(dāng)于給_age進行g(shù)et和set方法的聲明 @end
分類可以訪問原來類中的成員變量
主類與分類中方法的調(diào)用優(yōu)先級問題:
1> 當(dāng)分類與主類中都有同一個方法的時候, 優(yōu)先調(diào)用分類中的方法译仗。
2> 當(dāng)多個分類中都有同樣的一個方法的時候, 優(yōu)先調(diào)用最后一個參與編譯的分類中的方法抬虽。非正式協(xié)議
給Foundation中 NSObject類或者它的子類建立的分類, NSObject + eat
應(yīng)用:
NSString + countNumForString類擴展(匿名分類)
0> 類擴展是寫在.m文件中的, 為當(dāng)前類擴展一些私有的成員.
1> 作用: 為某個類擴充一些私有的成員變量和方法.
2> "類擴展"對比"分類", 就少了一個分類名稱, 因此也有人稱它為"匿名分類".
4官觅、 block
- block是一種數(shù)據(jù)類型, 可以使用這種數(shù)據(jù)類型定義變量, 并賦值纵菌。
- block數(shù)據(jù)類型在使用前需要先定義該數(shù)據(jù)類型, 然后再使用(就像使用Person類一樣, 先
定義一個Person類, 然后再通過Person類聲明一個Person類型變量)。 * block這種數(shù)據(jù)類型用來保存一個方法休涤、函數(shù)咱圆、一段代碼 - 必須掌握: block的定義語法笛辟、使用場景
無參無返回值
void (^變量名)();
變量名 = ^(){ }; 或者變量名=^{ };
有參無返回值
有參無返回值
有參有返回值 - 使用inlineBlock輔助編寫block代碼
//int (^block)(int,int) = ^(int n, int m){}; int (^block)(int,int) = ^(int n, int m){};
滿地打滾賣萌求贊,如果本文幫助到你序苏,輕點下方的紅心手幢,給作者君增加更新的動力。