Object-C 基础笔记3---属性

一,区别属性和实例变量

实例变量就是声明在接口大括号里面的变量.@public类型的实例变量直接使用->访问,

property 属性是一组设置器和访问器,属性是方法不是变量.

与类相似,属性需要声明和实现,声明在.h文件里,

@property int age;相当于:

-(void)setAge:(int)age;

-(int)age;

属性的实现:

@synthesize age=_age;//=后面给出要赋值或取值的实例变量

相当于实现了两个方法:

-(void)setAge:(int)age

{_age=age;}

-(int)age

{

return _age;

}

属性也可以设置特性,主要包括三个方面:

1,读写特性:readwrite读写属性,默认 readonly 只读属性相当于设置了getter方法,没有setter.

getter=name,setter=name设置方法名,制定getter和setter名.

2,原子性特性:atomic nonatomic 原子性和非原子性.

3,语义特性:语义属性可以通过以下关键字设置:

assign 直接赋值 适用于基本数据类型(不带*的成员变量或属性)

retain 赋值时做内存优化 适用于对象类型(带*的变量)

copy 复制一个副本 适用于特殊的对象类型(实现NSCoping协议的才能写copy);进入NSString里面会发现@interface NSString : NSObject <NSCopying, NSMutableCopying, NSSecureCoding>,这里的NSString实现了NSCopying.

点语法

一旦我们有了实例变量的设置器和访问器,就可以使用oc点语法

比如:p.age=20;等价于[p setAge:20];  对象.属性名

如果是int a=p.age就是调用了getter方法,等价于int a=[p age];

小结

属性是一组方法,实例变量是变量.两者不同.

定义属性@property 和@synthesize.   @synthesize age;等价于@synthesize age=age;

基本数据类型使用assign,对象类型使用retain,实现了NSCopying协议的对象使用copy.

- (void)setName:(NSString *)name//基本数据类型
{
    _name = name;
}
- (void)setName:(NSString *)name//实现了NSCopying协议的对象使用copy  也可以使用retain,一般都使用retain
{
    if (_name != name) {
        [_name release];
        _name = [name copy];
   }
}

- (void)setName:(NSString *)name//对象类型使用retain
{
    if (_name != name) {
       [_name release];
       _name = [name retain];
   }
}

点语法和[receiver message]是等价的.

@property(retain)NSString *name;等价于
- (void)setName:(NSString *)name
{
    if (_name != name) {
       [_name release];
       _name = [name retain];
   }
}

 

如果对象还是原来的对象就不做处理,如果setter里给的值不是原来有的值,就把原来的release掉,然后 在retain一下赋给_name

封装

封装:隐藏内部实现,提供接口调用. (就是把对象的状态和行为绑到一起的机制,使对象成为独立整体,并隐藏内部细节)

属性封装了实例变量

方法封装了具体实现代码

类封装了属性和方法

个人博客地址:http://www.cnblogs.com/huntaiji git 地址:https://github.com/lichanghong 专 业:计算机科学与技术 2015/01—2018/01/22 北京奇虎360科技有限公司 (360的企业安全分公司) 2014.6 — 2015/01 摩比神奇(北京)信息技术有限公司(360) iOS软件开发工程师 2014.1 — 2014.5 北京道同道科技有限公司 iOS软件开发工程师 2015/01/21 入职360开发天机/花椒直播/蓝信视频会议/安全邮件 2018/01/15 入职新氧
原文地址:https://www.cnblogs.com/huntaiji/p/3410016.html