@property 解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: @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];
}
}


相关文章
|
2月前
|
存储 Python
property-data.
【10月更文挑战第14天】
27 1
|
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’
2128 0
mybatis报错:Type handler was null on parameter mapping or property ‘__frch_xxx_0’
MyBaits异常解决:There is no getter for property named ‘ID‘ in ‘class ***‘
MyBaits异常解决:There is no getter for property named ‘ID‘ in ‘class ***‘
|
NoSQL Java Redis
一日一技:在什么情况下使用@property比较好?
一日一技:在什么情况下使用@property比较好?
93 0
|
JavaScript 前端开发
|
Java 数据库连接 mybatis
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
172 0
mybatis:There is no getter for property named ‘REGION‘ in ‘xxxEntity‘
|
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
307 0
高封装的property方法
class Person(): def __init__(self): self.__age = 0 def set_age(self, age): if age < 0 or age > 200: self.
735 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...
1345 0