ARC

關(guān)鍵字的描述
//strong: 用于表明該指針是一個強指針, 由它指向的對象不會被釋放. 描述一般的OC對象的時候, 使用strong. 但是在ARC下, 仍然可以使用retain, 但是編譯器在編譯的過程中, 會自動把retain變?yōu)閟trong.
@property (nonatomic, strong)NSArray *array;
@property (nonatomic, retain)UILabel *label;
//使用基本數(shù)據(jù)類型和結(jié)構(gòu)體的時候, 會使用unsafe_unretained.
@property (nonatomic, assign)int age;
//unsafe_unretained: 和assign類似, 也不會對對象的內(nèi)存產(chǎn)生影響. 但是描述基本數(shù)據(jù)類型和結(jié)構(gòu)體如果使用assign的話, 系統(tǒng)會自動編譯為unsafe_unretained這個關(guān)鍵字.
@property (nonatomic, unsafe_unretained)float weight;
//copy這個關(guān)鍵字在ARC下基本功能和MRC下是一樣,功能被保留.
@property (nonatomic, copy)NSString *name;
//weak: 在描述代理的時候, 或者在進行XIB連線控件的時候, 通常是weak. 不會導(dǎo)致對象的引用計數(shù)+1;
//在描述delegate對象的時候, 一般不適用assign和unsafe_unretained, 就是因為weak除了不會讓對象的引用計數(shù)+1之后, weak還有一個特殊的功能, 當一個對象被釋放的時候, 用weak修飾的指針會自動置為nil.(可以防止野指針的出現(xiàn)), 一個空對象可以調(diào)用任何方法都不崩潰.
//unsafe_unretained: 通過它描述的指針, 一旦它指向的對象被釋放后, 指針不會自動置為nil.
@property (nonatomic, weak)id delegate;
ARCdealloc方法的使用注意事項
#import "People.h"

@implementation People

//當前類的dealloc方法, 會在當前類的對象被釋放的時候被調(diào)用, 一般不要手動的調(diào)用dealloc方法.
//dealloc方法不僅僅可以在MRC環(huán)境下使用, 使用時候注意, 在dealloc方法內(nèi)部需要添加[super dealloc].
//同樣也可以在ARC環(huán)境下使用, 注意, 不能方法內(nèi)部添加[super dealloc], 因為我們不需要再調(diào)用release, autorelease等方法了.
- (void)dealloc
{
    NSLog(@"people對象被釋放了");
}

@end

OC與C對象的互轉(zhuǎn)(以及他們的管理權(quán)限問題)
#import "ViewController.h"
#import "People.h"

@interface ViewController ()
{
    void *_CFPeople;
    People *_people;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    People *people = [People new];
    
    //OC-->C: __bridge, __bridge_retained
    //void *: Core Foundation下的一個指針類型, 類似于Foundation下的id, 萬能指針, 可以指向任何對象.
    //__bridge: 是由OC對象轉(zhuǎn)化為C對象的一種方式, 使用這種方式, 就是在告訴編譯器, 只轉(zhuǎn)換類型, 不轉(zhuǎn)化對象內(nèi)存的管理權(quán)限.表明對象的內(nèi)存管理權(quán)限仍然在ARC手中.
    //void *CFPeople = (__bridge void *)people;
    
    //_CFPeople = (__bridge void *)people;
    //CFRetain(_CFPeople);
    
    
    //__bridge_retained: 告訴編譯器不僅僅轉(zhuǎn)化對象的類型, 同時讓對象的內(nèi)存管理權(quán)有Foundation下的ARC管理轉(zhuǎn)到Core Foundation下進行手動管理.
    //void *CFPeople = (__bridge_retained void *)people;
    
    //由于對象內(nèi)存的管理權(quán), 已經(jīng)轉(zhuǎn)到了Core Foundation下, 所以需要手動調(diào)用CFRelease來釋放一個局部對象.
    //CFRelease(CFPeople);
    
    
    //全局變量的釋放
    //_CFPeople = (__bridge_retained void *)people;
    
    
    
    
    
    
    //漢字轉(zhuǎn)拼音
    NSMutableString *mutableString = [[NSMutableString alloc] initWithString:@"張三"];
    
    //轉(zhuǎn)化成Core Foundation對象
    CFMutableStringRef string = (__bridge CFMutableStringRef)mutableString;
    
    //調(diào)用漢字轉(zhuǎn)拼音的函數(shù)
    CFStringTransform(string, NULL, kCFStringTransformMandarinLatin, NO);
    
    //去音符
    CFStringTransform(string, NULL, kCFStringTransformStripDiacritics, NO);
    
    //轉(zhuǎn)化完成之后, 需要把Core Foundation對象重新轉(zhuǎn)化為OC對象
    mutableString = (__bridge NSMutableString *)string;
    
    NSLog(@"mutableString = %@",mutableString);
    
    
    
    
    //在ARC和MRC進行混編的時候, 注意:
    //如果在ARC環(huán)境下, 使用支持MRC的文件, 需要給每一個文件配置-fno-objc-arc.
    //如果在MRC環(huán)境下, 使用支持ARC的文件, 需要給每一個文件配置-objc-arc.
    
    
    
    
    
    

}
- (void)dealloc
{
    
    NSLog(@"VC 被釋放了");
    CFRelease(_CFPeople);
    
}
- (IBAction)btn:(id)sender {
    
//    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
//    window.rootViewController = nil;
    
    
    //C-->OC: __bridge, __bridge_transfer
    //只轉(zhuǎn)換對象的類型, 不轉(zhuǎn)換對象的內(nèi)存管理權(quán)限.管理權(quán)仍然在Core Foundation下.
    //People *people = (__bridge People *)_CFPeople;
    
    //對象類型轉(zhuǎn)化之后, 需要手動的對Core Foundation對象進行CFRelease的操作.
    //CFRelease(_CFPeople);
    
    
    //_people = (__bridge People *)_CFPeople;
    
    
    
    //__bridge_transfer: 不僅僅轉(zhuǎn)化對象的類型, 同時把對象內(nèi)存的管理權(quán)限轉(zhuǎn)交給了ARC進行管理.
    //接下的操作, ARC就開始管理這個OC對象了.
    //People *people = (__bridge_transfer People *)_CFPeople;
    
    
    //交換管理權(quán)到ARC手中 __bridge_transfer:對對象的引用計數(shù)-1.
    //_people = (__bridge_transfer People *)_CFPeople;
    
}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末敷扫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湿刽,更是在濱河造成了極大的恐慌财搁,老刑警劉巖蹦肴,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡丈探,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門拔莱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碗降,“玉大人,你說我怎么就攤上這事塘秦∷显ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵尊剔,是天一觀的道長爪幻。 經(jīng)常有香客問我,道長须误,這世上最難降的妖魔是什么挨稿? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮京痢,結(jié)果婚禮上奶甘,老公的妹妹穿的比我還像新娘。我一直安慰自己祭椰,他們只是感情好臭家,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著方淤,像睡著了一般钉赁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臣淤,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天橄霉,我揣著相機與錄音,去河邊找鬼。 笑死姓蜂,一個胖子當著我的面吹牛按厘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钱慢,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼逮京,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了束莫?” 一聲冷哼從身側(cè)響起懒棉,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎览绿,沒想到半個月后策严,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡饿敲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年妻导,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怀各。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡倔韭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瓢对,到底是詐尸還是另有隱情寿酌,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布硕蛹,位于F島的核電站醇疼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妓美。R本人自食惡果不足惜僵腺,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壶栋。 院中可真熱鬧辰如,春花似錦、人聲如沸贵试。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毙玻。三九已至豌蟋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桑滩,已是汗流浹背梧疲。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人幌氮。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓缭受,卻偏偏與公主長得像,于是被迫代替她去往敵國和親该互。 傳聞我的和親對象是個殘疾皇子米者,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 以下是關(guān)于內(nèi)存管理的學(xué)習(xí)筆記:引用計數(shù)與ARC。iOS5以前自動引用計數(shù)(ARC)是在MacOS X 10.7與i...
    啊左閱讀 4,561評論 0 17
  • ARC是一個編譯器特征宇智,它提供了對OC對象自動管理內(nèi)存蔓搞。ARC讓開發(fā)者專注于感興趣的代碼和對象的關(guān)系,而不用考慮對...
    jiaoguifeng閱讀 541評論 0 1
  • OC的內(nèi)存管理以及MRC與ARC 內(nèi)存中的五大區(qū)域: 棧區(qū),堆區(qū),BBS段,數(shù)據(jù)段和代碼段,其中除了堆區(qū)以外,其他...
    晚照清舟閱讀 714評論 0 1
  • Cocoa內(nèi)存管理機制 (1)當你使用new、alloc太防、copy方法創(chuàng)建一個對象時妻顶,該對象的保留計數(shù)器值為1.當...
    John_LS閱讀 2,775評論 0 6
  • 南門不是一扇門酸员。南門是一座城蜒车。 當然,作為一座城幔嗦,哪能沒有門酿愧,南門城也是有門的。南門城只有一扇門邀泉,沒有名字嬉挡。其實也...
    茶人老七閱讀 278評論 2 1