@property 解析

简介: @property 解析

声明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];
}
}


相关文章
|
9月前
|
SQL
MyBaits异常解决:There is no getter for property named ‘ID‘ in ‘class ***‘
MyBaits异常解决:There is no getter for property named ‘ID‘ in ‘class ***‘
|
Java 数据库连接 mybatis
mybatis报错:Type handler was null on parameter mapping or property ‘__frch_xxx_0’
mybatis报错:Type handler was null on parameter mapping or property ‘__frch_xxx_0’
1582 0
mybatis报错:Type handler was null on parameter mapping or property ‘__frch_xxx_0’
|
11月前
|
NoSQL Java Redis
一日一技:在什么情况下使用@property比较好?
一日一技:在什么情况下使用@property比较好?
60 0
|
JavaScript 前端开发
|
XML SQL Java
Mybatis报错:There is no getter for property named ‘xxxx‘ in ‘class xxxx
Mybatis报错:There is no getter for property named ‘xxxx‘ in ‘class xxxx
172 0
|
Java 数据库连接 mybatis
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
138 0
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
|
Java
SpringMVC,JSP里treeselect的value值EL表达式报错!500,property not found on type
treeselect是一个列表选框,value是持久层提供的实际值。如果没有value则无法保存默认回显的值。 <sys:treeselect id="" name="" value="${entity.sPnum}" labelName="" labelValue="" title="" url="" extId="" cssClass="form-control" allowClear="true"/> 这段代码无法正常打开页面,f12报get 500,可以判断是后台出错。
1215 0
高封装的property方法
class Person(): def __init__(self): self.__age = 0 def set_age(self, age): if age < 0 or age > 200: self.
711 0
|
XML Java 数据库连接
传入mybatis的xml为Long型时报There is no getter for property named 'VARCHAR' in
修改前       insert into tb_content (id, category_id, title,       sub_title, title_desc, url,       pic, pic2, created,       updated, content)    valu...
1198 0