在Objective C中,我希望使用[self setVariable:value];
而不是variable = value;
好像做了自我设置我节省了几行代码,但还有其他什么优点?另外,我什么时候不想做自我设定?
答案 0 :(得分:3)
修改强>:
我应该澄清一点,我在下面引用的内容严格来说就是属性变量。如果变量只是一个ivar,那么self.variable = value
或variable = value
之间没有区别,除了self.variable = value
如果它只是一个ivar就不会编译的事实,在这种情况下你需要使用self->variable = value
致电
[self setVariable:value];
与调用
相同self.variable = value;
然而, 与
相同variable = value;
前两种情况使用合成的setVariable
方法(或您自己定义的方法)。您希望使用它的原因是为了确保在对象上保留适当的保留计数。
例如,一个简单的属性,例如:
@property (retain) NSString *myString;
获取一个自动生成的set函数,其外观如下:
-(void) setMyString:(NSString*)other
{
myString = [other retain];
}
如果你只是打电话
myString = otherString;
代码中的其他位置,然后myString
未正确保留,因此如果otherString
被取消分配,则指向该对象的指针不再有效。
答案 1 :(得分:1)
使用setter over value to value to variable的主要原因是实现Encapsulation。
一些好处是 -
答案 2 :(得分:0)
在保存需要保留和释放的对象时,您肯定需要使用它,以符合Objective-C内存管理模型。例如:
MyObject.h:
@interface MyObject : NSObject
{
NSString *_name;
}
@property (retain, nonatomic, readwrite) NSString *name;
@end
MyObject.m:
@implementation MyObject
@synthesize name = _name;
- (id)init
{
self = [super init];
if (self != nil)
{
self.name = [NSString stringWithFormat:@"name:%d", 12];
}
return self;
}
- (void)dealloc
{
self.name = nil;
[super dealloc];
}
@end
对于不需要内存管理的int
,float
等数据类型,您可以在不使用setter / getter方法的情况下离开,但是最好将它们全部用于时间。