黑马程序员 oc随记 @proprety与@synthesize

------- android培训、java培训、ios培训、期待与您交流! ----------

@proprety@synthesizexcode特有的一项简化代码的函数。

在Xcode4.4版本之前,程序员在使用@proprety时可不使用get以及set便对成员变量实行声明

@proprety int age=

-(void)setAge:(int)age;加上

-(int)age;

@synthesize则简化了实现过程

需要注意的是 @synthesize简化实现实际上是

@synthesize=

-(void)setAge:(int)age{

  self->age=age;

}

加上

-(int)age{

  return age;

}

我们能看到的是,@synthesize实际上是对age进行set和get的实现,并没有对_age实现,也就是说成员变量并没有在代码中得到赋值。

所以,若想将成员变量赋值,我们可以这么写:

@synthesizeage=_age;

如此,实际代码便变成了

-(void)setAge:(int)age{

  _age=age;

}

加上

-(int)age{

  return _age;

}

 

当然,这些都是在Xcode4.4之前苹果公司为我们实施的便利,在版本更新后苹果公司提供了更多的便利,即在使用@proprety时同时实施声明与实现,不再需要@ synthesize

并且,在使用@proprety时并不是对age进行set和get的声明和实现,而是直接对_age实施声明和实现,十分便利,但需要注意的是,使用@proprety可以不在@interface中添加相应的成员变量,即:

@interface person:NSOject

{

   int _age;

  nsstring *_name;  //这两个成员变量可以省去不写

}

@propretyint age;

@propretynsstring *name;

@end

 

在得到这方面便利的同时,同样要承担相对的风险,即成员变量在省去不写时它在声明与实现时将成为不可被子类继承与使用的私有变量。

所以,若是想要享受便利,又希望成员变量能被子类继承与使用,那么请在书写时不要将成员变量省去,保留如int _agensstring *_name的成员变量。


你可能感兴趣的:(黑马程序员 oc随记 @proprety与@synthesize)