屬性變數如何release?

2021-06-01 09:46:08 字數 943 閱讀 5140

為了釋放物件擁有的例項變數,常用的方法是在dealloc中呼叫release,比如下面的**:

@inte***ce myclass : nsobject   

@end

@implementation myclass

//something...-(

void

)dealloc

@end

如果這裡的name是屬性變數呢?在iphone開發基礎教程這本書裡,你會經常在看到這樣的**:

@inte***ce myclass : nsobject 

@property(retain) nsstring

*name;

@end

@implementation myclass

@synthesize name;-(

void

)dealloc

@end

這裡並沒有直接訪問變數本身,而是使用了編譯器自動生成的setter。那問題就來了,咋的一賦值成nil,就能release了?想想看一般的setter的是怎麼寫的,看下面:

-

(void

) setname:(nsstring

*) value

ok,很方便的寫法。但是不是說就沒有問題呢?請參考下面的討論,在kvc機制中是會有問題的。

自己補充:

作為一條規則,不要直接傳送release給已保留的屬性,也就是不要用這個方式[self.name release].

因為:如果[self.name release]後,該變數現在指向的記憶體可能被釋放了,接下來將乙個物件賦值給已保留屬性時(比如self.name = ***),self.name所指的記憶體將收到一條另外的release訊息,這會導致重複釋放異常,從而使應用程式崩潰。

VC如何除錯release版本

project setting c c general頁 optimizations中選擇disable debug debug info中選擇program database or program database for edit and conitnue project setting lin...

VC6 0 Release 如何除錯

寫下來吧,當你在release版本下無能為力的時候 首先必須明確的是,什麼是release版程式,什麼是debug版程式 debug通常稱為除錯版本,它包含除錯資訊,並且不作任何優化,便於程式設計師除錯程式。release稱為發布版本,它往往是進行了各種優化,使得程式在 大小和執行速度上都是最優的,...

條件變數屬性 時鐘屬性

條件變數有兩個屬性 程序共享屬性 時鐘屬性。1 程序共享屬性 條件變數與互斥量的共享屬性的用法一樣 int pthread condattr init pthread condattr t attr int pthread condattr destroy pthread condattr t at...