我對Objective-C中的內存管理有疑問。目標C中使用[release] C
-(void)viewDidLoad
{
NSNumber *num=[[NSNumber alloc] initWithInt:10];
[num release];
NSLog(@」%i」,num);
}
上述代碼通過打印值正常工作。但是一旦物體被釋放,它就會失去它的價值?那麼它的工作狀況如何呢?
我對Objective-C中的內存管理有疑問。目標C中使用[release] C
-(void)viewDidLoad
{
NSNumber *num=[[NSNumber alloc] initWithInt:10];
[num release];
NSLog(@」%i」,num);
}
上述代碼通過打印值正常工作。但是一旦物體被釋放,它就會失去它的價值?那麼它的工作狀況如何呢?
以下是發生了什麼事。首先,你這樣做:
NSNumber *num=[[NSNumber alloc] initWithInt:10];
你num
變量現在包含一個指向NSNumber
對象,(因爲你使用alloc
)你自己該對象。然後,你這樣做:
[num release];
當你發送release
的對象,你放棄了你的所有權。該對象可能仍然存在並保持不變,或者可能已被銷燬。你不知道。您的num
變量仍然包含相同的指針,但它指向的內存現在可能不是有效的對象,因此您無法安全地將消息發送到該對象。
然後你這樣做:
NSLog(@」%i」,num);
在這種NSLog
說法,你是治療num
爲整數,不爲指針,因爲%i
格式的整數。你只是在打印對象所在的地址(內存位置)(可能還是 - 你不知道)。所以num
是否指向一個有效的對象並不重要;你只是將num
視爲任意整數。您並未嘗試向NSNumber
對象發送任何消息。
謝謝你搶劫....這是一個明確的解釋。 – Preethi 2012-08-02 08:43:50
它打印什麼? '%i'意思是「整數值」,你已經給出了一個對象指針;'%@'是適當的'NSLog()'值來試圖打印對象(否則你只是看着整數指針的值,據推測...)。 – 2012-08-02 03:55:39