2011-06-30 21 views
44

我已經跳上了ARC的潮流。在過去,我會宣佈這樣我的委託性質:如何使用代表與自動參考計數

@property(assign) id<MyProtocol> delegate; 

所以我想我會做下的ARC:

@property(weak) id<MyProtocol> delegate; 

並非如此。論.M的@synthesize聲明我有一個編譯錯誤

*語義問題:現有的__weak財產「委託」伊娃「代理」必須__weak *

我已經宣佈它爲弱雖然!另外我如何將實現協議的類傳遞給弱引用的屬性。我是否必須將其包裝在那些奇怪的obj_unretained調用之一中?

對此的任何幫助將非常感激。

+2

ARC可以公開討論。 iOS 5特定的API不能。 – bbum

+0

這意味着iOS 5支持GC Obj-C,除非蘋果宣佈它(我不知道他們有沒有;我一直忙得無法跟上),這大概是保密的。 –

回答

65

「ivar」表示「實例變量」,您沒有顯示。我敢打賭,它看起來是這樣的:

@interface Foo : NSObject { 
    id delegate; 
} 

@property (weak) id delegate; 

什麼錯誤的意思是,它必須是這樣的:

@interface Foo : NSObject { 
    __weak id delegate; 
} 

@property (weak) id delegate; 

如果物業聲稱自己是弱者,伊娃的價值最終被存儲在一定也很弱。

+43

或者您可以完全刪除ivar,讓'@ synthesize'爲您處理。 :) –

+3

你的假設是正確的。 DaveDelong - 你告訴我,1.5年來,我一直在頭上寫ivars的ios以及@property聲明,當我綜合時,我不需要ivar嗎?!這是驚人的笑聲!謝謝! –

+2

@Mike不覺得不好。在過去的一年裏,跨架構和耦合器增加了這種能力+。不過,它現在已經完成。 – bbum