// // ViewController.m // OC17內存管理和自動引用計數 // // Created by Zoujie on 15/10/25. // Copyright © 2015年 Zoujie. All rights reserved. // #import "ViewController.h" #import "Fraction.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; #pragma mark 內存管理的基本知識 //應用沒有足夠的內存去坐更多地事情,就有崩潰的可能。內存管理關心的是清理(回收)不用的內存,以便內存可以再次利用。 // 1.釋放不在使用對象的內存 // 2.肯定對象不在須要使用 // 3.引用計數(手動,用於支持遺留的非ARC工程) [self managerMemoryByMyself]; // 4.Xcode4.2之後 ARC 自動引用計數 [self autoARC]; } -(void)managerMemoryByMyself { // 當建立對象時,初始的引用計數爲1 // 每當建立引用到對象須要爲引用對象+1 ,發送retain消息 id obj,obj1; // [obj retain]; // 當不須要對象時,經過給對象發送release消息 ,爲引用計數減1 // [obj release]; // 當引用計數爲0的時候,系統就知道這個對象不在須要使用了 // add方法 會增長引用計數 [obj addObject:obj1]; [obj addSubview:obj1]; // remove會減小對象引用計數 [obj removeObjectAtIndex:0]; [obj removeFromSuperview]; // NSAutoreleasePool 自動釋放池能夠幫助追蹤須要延遲一些時間釋放的對象,經過給自動釋放池發送drain消息,自動釋放池會被清理,對象會被釋放 // [obj1 autorelease]; Fraction *frac1 = [[Fraction alloc]init]; Fraction *frac2 = [[Fraction alloc]init]; // [frac1 release]; // [frac2 release]; } -(void)autoARC { } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end