成员变量的getter/setter方法
创新互联拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的成都网站设计、网站制作、外贸营销网站建设、网站维护、成都服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城开发、政府网站等各类型客户群体,为全球近千家企业提供全方位网站维护、服务器维护解决方案。成员变量的编程规范:
以_开头,并使用能够表示其含义的单词
遵循驼峰规则:如果是多个单词的组合,则除第一个单词外每个单词首字母大写
成员变量的权限:
基于面向对象的封装特征,很少将成员变量直接暴漏在外,权限一般为@protected或@private
如果在类的外部想要访问成员变量,则应提供方法接口。
getter方法:
作用:返回对象内部的成员变量
命名规范:方法名与成员变量名一致。
有返回值,类型与成员变量一致,不需要接受任何参数
setter方法:
作用:提供一个方法给外界设置成员变量值,可以在方法里面对参数进行过滤
命名规范:以set开头,后面跟成员变量名(首字母大写)
返回值一定是void,接受一个参数且与成员变量类型相同
形参名不要和成员变量一样
如果一个成员变量是只读的或者不提供直接修改的方法,则不提供setter方法即可
@property关键字
一般情况下,我们要为每个成员变量设置getter方法以及setter方法,随着一个类中成员变量数量的增大,会产生大量重复性的代码;
@property关键字减少了我们这种重复性代码的编写,即@property帮助我们在接口中快速声明getter方法及setter方法。
@synthesize关键字
@property关键字
在接口中快速生成getter/setter方法的声明
@synthesize关键字
在实现中快速生成getter/setter方法的定义
苹果公司提倡工程师去实现 那些核心代码,而垃圾代码交给 编译器去完成
属性
从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,如果做了编译会产生警告
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。