2015-02-08 63 views
2

我繼承莢的類,並在這個類有,我想揭露和我的類中使用一個專用的實例變量:通常暴露受保護的Objective-C的實例變量的子類

@interface MySuperClass() { 
    UIScrollView *_scrollView; 
} 

與曝光一個私人成員或方法,我會使用前面提到的here之類的類別,但我在使用私有實例變量時遇到問題。我讀here Associative References可能工作,但我無法使其工作。

+0

你實現[這](http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative -references /)? – Mundi 2015-02-08 14:57:49

+0

@Mundi我試過了,但它對我沒有用,也許我在實現它時犯了一個錯誤。 – Aviram 2015-02-08 15:01:04

+0

我不認爲你可以。 anInstanceOfMySuperClass._scrollView是不可能的,因爲點符號用於訪問屬性。如果你真的想這樣做,也許你可以編寫一個setter和getter方法來模擬這種行爲。 – user523234 2015-02-08 15:30:02

回答

6

嘗試在子類中實現:

- (UIScrollView *)scrollView { 
    return [self valueForKey:@"_scrollView"] 
} 
+0

謝謝!有效 – Aviram 2015-04-13 13:25:33

-1

不幸的是,在Objective-C中沒有辦法聲明私有實例變量。

無論您希望您的子類能夠看到什麼,您都必須在.h-文件中聲明。您正在討論的關聯引用以完全相同的方式工作,但他們解決了另一個問題,即在類別中聲明實例變量。

這是由於語言的設計,我想這是有道理在.m文件是真的實施文件,並沒有其他類應該真正關心的另一個實施方式,即使有繼承關係像子類。

帶有該pod類的私有實例變量的選項將放在屬性中,或者實際執行類別,您可以在其中添加方法來訪問它。

+0

我試圖實現一個由私有實例組成的類別,但它不起作用。 – Aviram 2015-02-09 09:33:40