2014-08-29 41 views
0

有沒有辦法來定義將上設置屬性一樣運行setter方法:定義setter方法上的屬性設置

我想打電話給

object.something = 0; 

與此同時,在對象類我想實現像

- (void)setSomething:(NSInteger)something{ 
    self.something = something; 

    // some other work too 
} 
+6

你似乎擁有它,除了它會是'_something = something;'。 – trojanfoe 2014-08-29 07:25:20

回答

3

你想要什麼叫做屬性。 你在課堂上@接口定義屬性,如:

@interface MyClass() 
@property (strong, nonatomic) SomeClass *object; 
@end 

它會自動創建伊娃_object,setter和getter它。 您可以覆蓋訪問器方法。但是如果你重寫setter和getter,你需要合成屬性,如:

@implementation MyClass 
@synthesize object = _object; 
//setter 
- (void)setObject:(SomeClass *)object 
{ 
    _object = object; 
} 
//getter 
- (SomeClass *)object 
{ 
    return _object; 
} 
//class implementation 
@end 
+0

@trojanfoe,如果我理解正確,如果你重寫兩個訪問器,實例變量不會被創建。那麼,如果你嘗試不合成屬性並覆蓋set和get,在類實現中使用_object ivar將導致編譯時錯誤 – 2014-08-29 07:42:19

+1

@trojanfoe http://imgur.com/cqaG6jy注意到,我已經添加了合成。這就是你沒有綜合的結果:http://imgur.com/sM64dfj。如果你不覆蓋兩個訪問器方法,你不需要綜合屬性:http://imgur.com/ru4s4UQ – 2014-08-29 07:53:21

+0

嗯,有趣。我撤回了我的評論。當我覆蓋導致混淆的訪問器時,我總是提供自己的實例變量。 – trojanfoe 2014-08-29 07:59:16

0

你可以這樣說:

@property (nonatomic, weak, setter = setSomething:) UIImageView *photoImageView; 

無論如何,setSomething:是名爲something的屬性的默認方法。正如評論中指出的那樣,你只需要用_some取代self.something。

相關問題