等等,這個變數容器已經不在存放著iPad了,但要怎麼從變數容器中移除呢? |
我是nil, 你也可以叫我Nil或是NULL, 我代表"什麼都沒有", 只要你將我放在變數容器中就可以清除iPad於存在了。 |
1. 建立iPad
- 建立iPad類別
iPad.h
#import <Foundation/Foundation.h>
@interface iPad : NSObject
-(void) connectInternetWithWifi;
@end
2. 宣告變數存放iPad
- 在此宣告變數以存放iPad,並放入iPad
#import <Foundation/Foundation.h>
#import "iPad.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * pad1 = [[iPad alloc]init];
iPad * pad2 = [[iPad alloc]init];
id pad3 = [[iPad alloc]init];
}
return 0;
}
3. 代入nil清除變數
- 此時若想要讓變數清空,則可代入nil,以表示變數中沒有任何的東西了
- 當然在Objective-C中,nil、Nil與NULL皆是相同的
#import <Foundation/Foundation.h>
#import "iPad.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * pad1 = [[iPad alloc]init];
iPad * pad2 = [[iPad alloc]init];
id pad3 = [[iPad alloc]init];
//透過nil/Nil/NULL將變數清空,
//以達到移除變數中物件的目的
pad1 = nil;
pad2 = Nil;
pad3 = NULL;
}
return 0;
}
檔案連結:objective_c_nil.zip
nil可以接放所有訊息,乎略所有訊 息:
- 還記得當我們傳送一個訊息給物件時,若物件無對應方法執行的話程式將會中止
- 但若是為nil、Nil或是NULL,則會乎略所有訊息,而不會造成程式當機中止,這是一個很好的特性(個人非常覺得),程式最多不執行您預期的功能,但至少不會造成當機的困擾,如下列程式:
#import <Foundation/Foundation.h>
#import "iPad.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
iPad * pad1 = [[iPad alloc]init];
//透過nil/Nil/NULL將變數清空,
//以達到移除變數中物件的目的
pad1 = nil;
//這時傳送連線網路的connectInternetWithWifi訊息,
//程式也不會當機中斷
[pad1 connectInternetWithWifi];
}
return 0;
}
- ARC,全名Automatic Reference Counting,是objective-c用來進行記憶體管理的手法,在iOS 5.0版時引進
- 過網的記憶體管理是需要透過計數的方式,有人使用就+1,沒有使用就-1,直到此物件參照的次數為0時,這個物件就會被釋放掉
- 但在ARC你只需簡單的將變數設為nil、Nil或NULL即可,編譯器會幫您自動加上計數相關的程式,所以計憶體管理最重要的一件事,就是將不要用的物件,其存放它的變數設定為nil,如此就可完全作好記憶體管理,當然,重複的給予nil也是可以的