2014-02-19 54 views
-2

当我宣布一个NSString我简单地做:IOS:财产和自我

NSString * my_string; (in interface of my .h) 

如果我想允许访问从其他类此字符串我这样

property (nonatomic, strong) NSString *my_string; 

添加属性而我写的合成

synthesize my_string; (in .m) 

现在我的一些问题:

  1. 如果我使用一个属性,我还必须在接口中使用简单声明吗?
  2. 如果我使用my_string作为属性,我必须以前总是使用self.吗?
  3. 如果我使用一个属性,是否有必要为每个属性编写@synthesize? (因为我看到,有时是没有必要的。

回答

1

如果我使用的属性,必须我也用简单的声明接口?

不,一般你只想使用@property(它会悄悄地为你添加一个实例变量)。

如果我使用my_string作为属性,我必须总是使用self。之前?

你不需要,但你应该。使用self.调用访问器方法来获取变量内容。不使用self.直接访问实例变量。所以,如果您将来添加自定义访问器,您将需要重构。

通常您会多次重复使用相同的变量。在这种情况下,调用self.,但使用它来设置一个局部变量,然后在整个方法中使用(这种方式访问​​器只调用一次)。

如果我使用一个属性,是否有必要为每个属性编写@synthesize? (因为我看到,有时是没有必要的

没有,编译器会增加。

@synthesize propertyName = _propertyName; 

你,那就是遵循(从实例变量分离属性名的好方法名称)

0
  1. NO
  2. NO,采用的自我。将执行存取方法,你可以用名字_my_string使用它,那么你就直接访问变量。如果你想为你的财产不同的变量名,那么就必须使用synthetize这个名字
  3. NO时,Xcode将自动命名_my_string
+1

“xcode将合成”,这将是'clang'。 – trojanfoe

0

变量它越来越适合于所有的C使用性能synthetize它Ases了。如果您不想将它们暴露给外部类,则可以在.m文件中的扩展头内部声明“私有”属性。假设你在.h文件的属性称为名称:

@property (nonatomic, strong) NSString *name; 

这个类的用户可以通过说出theVariable.name访问name属性,你.m文件里面你需要访问这个属性self.name 。然而,你可以这样访问伊娃:

_name = @"John Smith" 

这将跳过财产,并直接进入伊娃。在这种情况下,如果你有一个overriden setter,它将不会被调用。

您不再需要综合属性。 Xcode中会自动提供这样的:

@synthesize name = _name;