2012-04-12 26 views
1

例子:我應該使用什麼限定詞來聲明塊爲伊娃?

 
typedef void(^responseBlock)(NSDictionary*, NSError *); 
@interface MyClass : NSObject 
{ 
    [??] responseBlock responseHandler; 
} 

我應該把什麼資格在[??]括號?

我讀過這些塊,因爲應該使用複製限定符設置屬性......但在這種情況下,我不需要將塊作爲屬性公開。我只是想讓它成爲一個伊娃,但我怎樣才能指定複製?而且,沒有指定什麼是使用的默認限定符?像所有其他情況一樣,它是否是__strong?

我在ios5上使用ARC。

回答

5

是的,塊是ObjC中的對象,所以__strong是合適的限定符。由於這是默認設置,因此您可以將其關閉。

您無法指定該塊在沒有屬性的情況下被複制 - 這將是您的責任(responseHandler = [someBlock copy];)。你可以通過把一個類擴展您的.m文件聲明,這只是這個類本身可見(不提供給其他代碼)的屬性:

@interface MyClass() 
@property (copy) responseBlock responseHandler; 
@end 

這(在被合成)會給你平時的存取方法,當你使用它們時,它會照顧你的副本。

另請注意,有可能(和now the recommended procedure)在@implementation塊中聲明實例變量。這聽起來像你希望這是一個私有屬性(沒有屬性訪問),並且在其中聲明的ivars不能被任何其他代碼看到。 (當然,你並不需要,如果你使用一個屬性來做到這一點; @synthesize將創建伊娃適合你。)

@implementation MyClass 
{ 
    responseBlock responseHandler; 
} 

// Continue with implementation as usual 
+0

優秀,這清除了不少東西給我。感謝您對新推薦的在實施過程中宣佈ivars的做法做出的詳細迴應和呼籲。 – 2012-04-12 20:56:56

相關問題