发布一个ObjectiveC初学者级别的问题。
当我使用属性声明对象时,我看到可以通过2种方法访问特定属性。

@property(nonatomic,retain) NSString *str;
  • 使用@synthesize propertyname例如:@synthesize str;
  • 通过使用关键字self例如:self.str;

  • 那么这两种方法有什么区别,哪种更合适。谢谢你的时间

    最佳答案

    @synthesize不能用于访问属性。这是一个编译器指令。使用@property声明属性时,编译器会自动生成访问器方法(getter和setter)。在旧版本中,必须显式使用@synthezie来让编译器知道它必须生成访问器方法。对于较新的版本,则不需要。编译器自动生成访问器方法。

    如果您已将该属性声明为

    @property (nonatomic, retain) NSString *str;
    

    如果不使用@synthesize,则ivar将为_str,而getter将为
    -(NSString)str
    

    然后是二传手
    -(void)setStr:(NSString *)newStr
    

    如果您专门提到@synthesize为
    @synthesize str = _myStr
    

    然后,该ivar将是_mystr而不是_str

    因此,为了访问属性str,您必须使用self.str[self str]

    09-30 16:01
    查看更多