Object-C@property

上传人:ths****59 文档编号:45104866 上传时间:2018-06-15 格式:DOCX 页数:5 大小:20.16KB
返回 下载 相关 举报
Object-C@property_第1页
第1页 / 共5页
Object-C@property_第2页
第2页 / 共5页
Object-C@property_第3页
第3页 / 共5页
Object-C@property_第4页
第4页 / 共5页
Object-C@property_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《Object-C@property》由会员分享,可在线阅读,更多相关《Object-C@property(5页珍藏版)》请在金锄头文库上搜索。

1、编辑本段编辑本段简介简介Objective-C 语言关键词,与synthesize 配对使用。功能:让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。如:1、在头文件中:property int count;等效于在头文件中声明 2 个方法:- (int)count;-(void)setCount:(int)newCount;2、实现文件(.m)中synthesize count;等效于在实现文件(.m)中实现 2 个方法。- (int)countreturn count;-(void)setCount:(int)newCountcount = newCount;以上等效的函数

2、部分由编译器自动帮开发者填充完成,简化了编码输入工作量。编辑本段编辑本段格式格式声明 property 的语法为:property (参数 1,参数 2) 类型 名字;如:property(nonatomic,retain) UIWindow *window;其中参数主要分为三类:读写属性: (readwrite/readonly)setter 语意:(assign/retain/copy)原子性: (atomicity/nonatomic)各参数意义如下:readwrite产生 settergetter 方法readonly只产生简单的 getter,没有 setter。assign默认类型

3、,setter 方法直接赋值,而不进行 retain 操作retainsetter 方法对参数进行 release 旧值,再 retain 新值。copysetter 方法进行 Copy 操作,与 retain 一样nonatomic禁止多线程,变量保护,提高性能编辑本段编辑本段参数类型详解参数类型详解参数中比较复杂的是 retain 和 copy,具体分析如下:getter 分析分析1、 property(nonatomic,retain)test* thetest;property(nonatomic ,copy)test* thetest;等效代码:-(void)thetestretur

4、n thetest;2、property(retain)test* thetest;property(copy)test* thetest;等效代码:-(void)thetestthetest retain;return thetest autorelease;setter 分析分析1、property(nonatomic,retain)test* thetest;property(retain)test* thetest;等效于:-(void)setThetest:(test *)newThetest if (thetest!= newThetest) thetestrelease;thet

5、est= newThetest retain;2、property(nonatomic,copy)test* thetest;property(copy)test* thetest;等效于:-(void)setThetest:(test *)newThetest if (thetest!= newThetest) thetestrelease;thetest= newThetest copy;不过还有以下疑问:1、申明一个 property 一定要在类里面同时申明一个同名变量吗?猜测 ANS:根据上面的说明应该是不用的,但是很多人一般都会这样做(实际他们在类里面申明的并不是同名变量,一般会加以

6、区分,比如申明了property int a;一般在类里就申明成员变量 int _a;之类的。)property 主要是供外部使用的,猜测再定义类成员变量应该是为了方便初始化,类内部使用也比较方便。(&待验证&)2、如果要在类方法里使用 self.a 的话,一定要将这个方法申明在.h 文件里?猜测 ANS:没必要主要注意的点:(主要是 property 前面的修饰关键字)1、nonatomic因为 OBJC 是默认 atomic,是支持多线程的,相当于给变量上锁一样。如果不是多线程的话,一般申明为 nonatomic,这样执行效率会高一些2、retain网上看了一些资料,说是释放旧的对象,再给

7、新对象赋值,也没搞清楚到底有什么用(&待查清&)3、类内部使用属性一定要用 self.a 的形式,具体解释见链接http:/ 里面 static final 有妙用。今天 OBJC 也想做个常量属性,完全没搞清楚就在 property 前面加了 readonly 的修饰关键字,然后去问一个前辈,能不能在 OBJC 里面实现类似 static final 的类的常量成员,结果被批一通,readonly 之后就是没有 setter 方法了,也就无法再给变量赋初值,一下子就成了中的战斗机。(readonly 这个关键字一般不拿来修饰 property)但与此同时,我也得到了上面的两个疑问(不出意外,

8、猜测的 ANS 应该是正确的),看来前辈自己也没搞清楚。一件小事,体会很深刻,明明自己试一下就知道的东西,却要去问别人,习惯性总认为别人的经验能给自己好的答案(实际这位前辈做 OBJC 也不久)。怕走错方向才去问别人,是限于大思路,而不是这种小细节。另外,其实接触 OBJC 并不是初始,之前已经接收了一个项目并且做完了。那个时候才是真的赶鸭子上架,对 OBJC完全不了解,仅仅看了一篇介绍 OBJC 基本语法,在能看懂代码的情况下就摸索着去写代码了。而在那个项目结束之后也一直没有总结,更没有深入了解,导致现在已经开始第二个 OBJC 项目却在这种小问题上尴尬的情况。记得刚刚毕业的时候做实习生,每学习一个模块每做完一个项目都要写总结,周总结,月总结,时时刻刻都在总结,那会儿是公司要求的,写总结时总觉得非常痛苦,一直期盼转正不用再写总结。总结是有很多好处的,其实自己心里清楚,只不过那时候项目一做完,人就放松了,明知道自己还有很多地方没梳理清楚,还有很多地方都不懂,却始终不愿去总结搞懂,只能说,提前蛋疼一下,可以确保以后很久很久都不蛋疼。还是要多多总结。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号