@property 解析

举报
清雨小竹 发表于 2022/09/25 02:12:42 2022/09/25
【摘要】 声明property的语法为: @property (参数1,参数2) 类型 名字; 如: @property(nonatomic,retain) UIWindow *window; 其中参数主要分为三类: 读写属性: (readwrite/readonly) sette...
声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:
@property(nonatomic,retain) UIWindow *window;
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite
产生setter\getter方法
readonly
只产生简单的getter,没有setter。
assign
默认类型,setter方法直接赋值,而不进行retain操作
retain
setter方法对参数进行release旧值,再retain新值。
copy
setter方法进行Copy操作,与retain一样
nonatomic
禁止多线程,变量保护,提高性能

参数类型详解

参数中比较复杂的是retain和copy,具体分析如下:

getter分析

1、 @property(nonatomic,retain)test* thetest;
@property(nonatomic ,copy)test* thetest;
等效代码:
-(test*)thetest
{
return thetest;
}
2、@property(retain)test* thetest;
@property(copy)test* thetest;
等效代码:
-(void)thetest
{
[thetest retain];
return [thetest autorelease];
}

setter分析

1、
@property(nonatomic,retain)test* thetest;
@property(retain)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest!= newThetest) {
[thetestrelease];
thetest= [newThetest retain];
}
}
2、@property(nonatomic,copy)test* thetest;
@property(copy)test* thetest;
等效于:
-(void)setThetest:(test *)newThetest {
if (thetest!= newThetest) {
[thetestrelease];
thetest= [newThetest copy];
}
}

文章来源: zzzili.blog.csdn.net,作者:清雨小竹,版权归原作者所有,如需转载,请联系作者。

原文链接:zzzili.blog.csdn.net/article/details/8874252

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。