我繼承莢的類,並在這個類有,我想揭露和我的類中使用一個專用的實例變量:通常暴露受保護的Objective-C的實例變量的子類
@interface MySuperClass() {
UIScrollView *_scrollView;
}
與曝光一個私人成員或方法,我會使用前面提到的here之類的類別,但我在使用私有實例變量時遇到問題。我讀here Associative References可能工作,但我無法使其工作。
我繼承莢的類,並在這個類有,我想揭露和我的類中使用一個專用的實例變量:通常暴露受保護的Objective-C的實例變量的子類
@interface MySuperClass() {
UIScrollView *_scrollView;
}
與曝光一個私人成員或方法,我會使用前面提到的here之類的類別,但我在使用私有實例變量時遇到問題。我讀here Associative References可能工作,但我無法使其工作。
嘗試在子類中實現:
- (UIScrollView *)scrollView {
return [self valueForKey:@"_scrollView"]
}
謝謝!有效 – Aviram 2015-04-13 13:25:33
不幸的是,在Objective-C中沒有辦法聲明私有實例變量。
無論您希望您的子類能夠看到什麼,您都必須在.h
-文件中聲明。您正在討論的關聯引用以完全相同的方式工作,但他們解決了另一個問題,即在類別中聲明實例變量。
這是由於語言的設計,我想這是有道理在.m
文件是真的實施文件,並沒有其他類應該真正關心的另一個實施方式,即使有繼承關係像子類。
帶有該pod類的私有實例變量的選項將放在屬性中,或者實際執行類別,您可以在其中添加方法來訪問它。
我試圖實現一個由私有實例組成的類別,但它不起作用。 – Aviram 2015-02-09 09:33:40
你實現[這](http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative -references /)? – Mundi 2015-02-08 14:57:49
@Mundi我試過了,但它對我沒有用,也許我在實現它時犯了一個錯誤。 – Aviram 2015-02-08 15:01:04
我不認爲你可以。 anInstanceOfMySuperClass._scrollView是不可能的,因爲點符號用於訪問屬性。如果你真的想這樣做,也許你可以編寫一個setter和getter方法來模擬這種行爲。 – user523234 2015-02-08 15:30:02