【讀書筆記】iOS-ARC-不要向已經釋放的對象發送消息

 

一,在AppDelegate.m中寫入以下代碼:app

 

複製代碼
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    NSObject *object=[[NSObject alloc]init];
    NSLog(@"%ld",[object retainCount]);
    [object release];
    NSLog(@"%ld",[object retainCount]);
    
    
    return YES;
}
複製代碼

 

 

二,運行,得出以下輸出。ide

 

2015-07-14 21:44:57.889 ARC不要向已經釋放的對象發送消息[2245:90589] 1
2015-07-14 21:44:57.890 ARC不要向已經釋放的對象發送消息[2245:90589] 1

 

 

三,結果分析。spa

1,引用計數的內存回收方式是「只作標記,並不抹除相關數據」。有點像是移動硬盤中刪除數據的時候,只是刪除數據,而這些數據並無真正在移動硬盤上進行刪除。code

2,上面的代碼中obect對象釋放以後,引用對象並不老是1,有時候也會出現程序崩潰的狀況。當object對象所佔的內存被複用的時候,就會出現程序崩潰的狀況。對象

3,「不要向已經釋放的對象發送消息」。例子是中是向已經釋放的object發送retainCount消息。blog

4,當一個對象經過release內存被回收以後,向這個對象發送任何消息,無論輸出結果是對,是錯,都是無效的。即便和預期的同樣,也只是恰巧碰上了。內存

 

參考資料:開發

《iOS開發進階》 --唐巧it

相關文章
相關標籤/搜索