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

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

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

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

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

求解答 一直以来的疑问


首先你要知道什么是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' 至少可以加修饰符啊


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


http://blog.devtang.com/blog/2015/03/15/ios-dev-controversy-1/

【热门文章】
【热门文章】