2016-07-29 29 views
0

在ReactiveCococa 2.5,RACMulticastConnection具有信號屬性,這是一個RACSignal,而在其實施方式中,它有一個的ivar _signal,這是一個RACSubject。我只是想知道信號的備份ivar是否是_signal,如何解釋它?在objective-c中,如果屬性的備份ivar是明確聲明的呢?

好吧,看來我的問題並不清楚,我在這裏放了一些演示代碼,希望有人能回答。

頭文件:

@interface RACMulticastConnection : NSObject 
@property (nonatomic, strong, readonly) RACSignal *signal; 
... 
@end 

的IMPL文件:

@interface RACMulticastConnection() { 
    RACSubject *_signal; 
    ... 
} 
... 

一兩件事,有在其執行沒有@synthesize代碼,當你所有已知的,RACSubject是的子類RACSignal。

+0

您的問題並不十分清楚。 – Droppy

回答

0

我只是想知道,如果信號的備份伊娃是_signal

也許......

  • 如果實現文件任何形式的不@synthesize signal則該屬性是汽車實施(標準方法)和ivar _signal將被用作支持變量。如果沒有ivar _signal那麼會自動創建一個。

也留下了兩個主要的歷史,選擇:

  • 如果有@synthesize signal那麼將引入伊娃signal爲後盾變量中使用,並且該聲明的伊娃_signal將不相關無論如何,該物業。

  • 最後,如果有@synthesize signal = _signal,那麼伊瓦爾_signal將用作支持變量。

附錄:評論/問題編輯後

你編輯的問題簡單地解決上述回答第一個子彈(無@synthesize情況下)。

也許你擔心類型RACSignal *財產,而伊娃有類型RACSubject *

記住屬性是readonly所以分配給它的執行中使用賦值給_signal的唯一途徑,而編譯器將檢查這樣的分配的類型爲RACSubject *(或子類型)。

類的客戶端讀取使用該屬性的值,並告訴值爲RACSignal *型的,它是爲RACSubjectRACSignal子類,所以一切都是正確的類型。

使用RACSubject *的伊娃是提高執行中檢查的方式 - 即屬性返回RACSignal *但執行知道它總是會返回子類RACSubject爲什麼不指出,這樣編譯器將捕獲的情況下,當纔不是?

爲了演示編譯器正在檢查嘗試更改_signal的類型,比如NSArray,並且您將收到一個編譯器錯誤,指出該類型不符合該屬性所要求的類型。

HTH

+0

我已更新問題,可否再次看到它? – Josscii

+0

@Josscii - 參見附錄。 HTH – CRD

+0

好的,謝謝你的解釋!當我第一次在這個源代碼中看到這個時,我以前沒有這樣用過,所以我想確保它是正確的,以及它爲什麼起作用。 – Josscii

0

如果我理解你的問題正確,提供明確的名稱,伊娃財產,只需添加

@synthesize propertyName = ivarName; 

如果不提供名稱,則編譯器做你使用模板:

@synthesize propertyName = _propertyName; 

我希望我回答你的問題。