2011-01-30 103 views
0

我有兩個類。一個是使用相同的文件作爲第二,與其他一些修改基本建立,但它們基本上是相同的,特別是對於他們的聲明文件(有這樣的事)...Xcode - 綠色變量x黑色變量

@protocol myClassDelegate <NSObject> 

// delegate protocol definition 

@end 


@interface myClass : UIView { 
id myObject; 
UIView *oneView; 
} 

@property(nonatomic,assign) id<myClassDelegate> delegate; 
@property(nonatomic,retain) UIView *oneView; 

,然後我有@synthesize oneView,委託; on .m

您看到的代碼對於這兩個類都是通用的。

兩個類的實現裏面,我多次使用這兩個對象,例如:在我的第一類

[delegate doStuff]; // <-- do you see this blue delegate here? Xcode put it green when it is declared on .h first. 

,oneView或委託的每次出現都被Xcode中顯示爲綠色(見下圖) 。在第二堂課中,他們顯示爲黑色。我通常認爲這個綠色字是某種承認變量已經在聲明中被識別並且對於該類是「全局」的。通常黑色變量表示本地實例。

現在的問題是,我有這些變量之一的問題被釋放,沒有我的意圖,完全在它顯示爲黑色的類上。

該類中沒有釋放該變量(dealloc除外),但使用這兩個類創建的對象始終在應用程序運行時一直處於活動狀態。

什麼可能是錯的?

exampla of what I consider correct

在此先感謝。

+0

委託var不能被釋放 - 它是一個assign-property! – Felix 2011-01-30 20:30:31

+0

抱歉,代碼中存在拼寫錯誤。 oneView被聲明爲保留。螞蟻這一個視圖在一個類中以黑色顯示,而在另一個類中顯示爲綠色。給我帶來問題的班級是變量是黑色的班級。 – Roger 2011-01-30 20:37:40

回答

0

如果標記屬性爲分配,你不能釋放它在該類中,永遠。這包括在dealloc中。從你的文章看來,你是在釋放委託。請注意,你應該在dealloc中設置變量爲零,或者如果你知道你已經完成了使用它,所以如果委託在別處被意外釋放,你將不會崩潰。

至於着色,我認爲唯一可能影響到這一點的是,如果你已經以同樣的方式在兩個文件中導入了「MyClassDelegate」。

1

我想在XCode編輯器中單詞的黑色意味着XCode沒有檢測到這個詞作爲實例變量。也許你忘了聲明delegate實例變量?因此錯誤必須在釋放delegate

注:你可以改變語法通過查看它的喜好凸顯了XCode顏色: enter image description here

+0

謝謝!問題是一個錯字。 – Roger 2011-01-30 22:18:03