一个 关于iOS很基础的关于变量的问题

@interface aaaa (){
    NSString *_name;
    UIButton *_btn;
}

@property (nonatomic,copy)NSString *name;
@property (nonatomic,strong)UIButton *btn;
@end

这两种方式都在controller中 既然都可以任意在哪儿赋值,任意使用,我想问这两种方式在这种情况下有什么区别?在这样的情况下哪种又比较好?

求解答 一直以来的疑问

阅读 3.2k
4 个回答

成员变量主要是适用于iOS5之前的开发,需要程序员手动进行内存管理。iOS5之后(包括iOS5)引入了ARC(Automatic Reference Counting)同过在property中使用strong,weak等标记自动对内存进行管理。也就是说进行iOS5及以后系统版本的开发,可以放心的使用property,而无需对其进行手动的内存管理。property会自动生成setter,getter方法,方便用点语法直接用。

首先你要知道什么是Class
Class中只有 数据(成员变量)行为(方法)

其次你要知道什么是属性
属性 就是针对 某个数据 提供一组 setter` 和 getter

比如 name属性
首先 会 建立一个成员变量 NSString* _name

其次 会 建立 -(NSString*)name; 这样一个getter方法
和一个 - (void) setName(NSstring*)newName; setter方法
两个方法

这就是属性
至于

xxx.name = @"freewolf";
//实际上就是 xxx.setName(@"freewolf");

当然 这之间还有 @synthesize的事儿 就是如何把属性和数据成员连起来 也就是 name属性对应修改_name成员变量

如果你只建立一个属性name
那么编译器会自动帮你建立 _name成员和 settname和getname方法 并且自动synthesize

'@property' 至少可以加修饰符啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题