zoukankan      html  css  js  c++  java
  • 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 入职新氧
  • 相关阅读:
    Django
    闭包&装饰器
    Python学习 Day 062
    Python学习 Day 059
    Python学习 Day 058
    Python生成器
    第一类对象(函数),闭包及迭代器
    进阶函数的学习
    对函数的初步了解
    python文件操作
  • 原文地址:https://www.cnblogs.com/huntaiji/p/3410016.html
Copyright © 2011-2022 走看看