Objective-C(4)成员变量的包装---属性

  • 成员变量的getter/setter方法

    创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都网站设计、新会网络推广、成都小程序开发、新会网络营销、新会企业策划、新会品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供新会建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

成员变量的编程规范:

    以_开头,并使用能够表示其含义的单词

    遵循驼峰规则:如果是多个单词的组合,则除第一个单词外每个单词首字母大写

成员变量的权限:

    基于面向对象的封装特征,很少将成员变量直接暴漏在外,权限一般为@protected或@private

    如果在类的外部想要访问成员变量,则应提供方法接口。

getter方法:

     作用:返回对象内部的成员变量

     命名规范:方法名与成员变量名一致。

     有返回值,类型与成员变量一致,不需要接受任何参数

setter方法:

     作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行过滤

     命名规范:以set开头,后面跟成员变量名(首字母大写)

     返回值一定是void,接受一个参数且与成员变量类型相同

     形参名不要和成员变量一样

     如果一个成员变量是只读的或者不提供直接修改的方法,则不提供setter方法即可

  • @property关键字

一般情况下,我们要为每个成员变量设置getter方法以及setter方法,随着一个类中成员变量数量的增大,会产生大量重复性的代码;

@property关键字减少了我们这种重复性代码的编写,即@property帮助我们在接口中快速声明getter方法及setter方法。

    Objective-C(4)成员变量的包装---属性

  • @synthesize关键字

@property关键字

     在接口中快速生成getter/setter方法的声明

@synthesize关键字

     在实现中快速生成getter/setter方法的定义

    Objective-C(4)成员变量的包装---属性

苹果公司提倡工程师去实现 那些核心代码,而垃圾代码交给 编译器去完成

  • 属性

从Xcode4.5开始,@synthesize的功能被@property包揽,且其管理的成员变量也不需要声明

    即:@property可以直接声明一个成员变量并实现其getter/setter方法

使用@property声明的成员变量,称之为属性。

属性所管理的成员变量的访问权限是:@private

  • 属性的访问方式

成员变量访问方式:

     只能在对象的方法中方法,如self->_age

     注意:在方法中,也可以访问同一类型的其他对象的成员变量

getter/setter方法访问方式:

     可以在对象的方法中或者其他方法或函数中通过getter/setter访问

    Person *pp = [Person new];
    [pp setName:@"neuedu"];
    NSLog(@“name:%@”, [pp name]);

点语法访问:     

    可以使用点语法简化方法的调用:

    pp.name = @"neuedu";
    NSLog(@"name:%@", pp.name);

     点语法的引入在简化了 方法调用的同时降低了 对工程师的要求

     注意与pp为指针,取 成员应使用->,要注意 区分

  • @property的参数

@property可以带一些参数,来限定属性的一些特性

     @property参数有五类,每一类都一个默认值,且只能有一个值

1)是否提供setter方法

     readonly: 只生成get方法

     readwrite:生成set方法及get方法(默认)

     如:

@property (readonly) NSString *name;

2)内存管理相关的

     retain、strong(引用计数+1)

          ARC使用strong,非ARC使用retain

     assign、weak:直接赋值(引用计数不变)

          非ARC使用assign

          ARC中OC对象使用weak,非OC对象使用assign

     copy:用于深拷贝(新的),引用计数为1

          一般用于NSStirng

3) 多线程原子操作

     nonatomic: setter方法时不要加上多线程锁的代码

     atomic: setter方法时加上多线程锁的代码(默认)

     在单线程的情况下,应这样定义:

@property (nonatomic,readonly) NSString *name;

4)指定setter/getter方法名

     用@property声明的属性,会自动生成方法,同时也可以指定一个自定义的方法

     如:

@property (getter = abc, setter= setAbc:) int age;

     其实并不推荐这样去做,主要用在BOOL类型属性上

     如:

     @property (getter = isRich) BOOL rich;

5)空值警告参数(Xcode7新特性)

    用于编译器在编译过过程中,对属性赋值语句产生必要的警告,从Xcode6.3开始引入

     nullable:允许赋值为nil

     nonnull:不允许赋值为nil,如果做了编译会产生警告


文章标题:Objective-C(4)成员变量的包装---属性
文章位置:http://azwzsj.com/article/ipedje.html