2014-08-29 61 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。