@property的参数
转载请标明出处:
http://blog.csdn.net/xmxkf/article/details/51353580
本文出自:【openXu的博客】
| 参数类别 | 参数 | 说明 |
|---|---|---|
| 原子性 | atomic | 对属性加锁,多线程下线程安全,默认值 |
| nonatomic | 对属性不加锁,多线程下不安全,但速度快 | |
| 读写属性 | readwrite | 生成getter、setter方法,默认值 |
| readonly | 只生成getter方法 | |
| set方法处理 | assign | 直接赋值,默认值 |
| retain | 先release原来的值,再retain新值(包括判断是否为同一个值) | |
| copy | 先release原来的值,再copy新值(包括判断是否为同一个值) |
copy拷贝(复制)分类:
①、深拷贝(深复制):内容拷贝,会产生新对象
②、浅拷贝(浅复制):指针拷贝,不会产生新对象
至于copy某个对象是深拷贝还是浅拷贝,只需要遵循下面两个原则,然后推测即可。
copy语法的两个原则:
①、新指针和旧指针指向对象的内容要一样
②、修改新指针指向的对象不会影响旧指针指向的对象
修改旧指针指向的对象不会影响新指针指向的对象
比如:
#pragma mark NSString的mutableCopy 深拷贝
void stringMutableCopy(){
// 不可变的字符串
NSString *old = [[NSString alloc] initWithFormat:@"Jack"];
// 拷贝产生了一个可变的字符串,为了修改新指针指向的对象不会影响旧指针指向的对象,所以必须生成一个新的对象(深拷贝)
NSMutableString *new = [old mutableCopy];
[new appendString:@" 1234"];
NSLog(@"old=%@", old);
NSLog(@"new=%@", new);
[new release];
[old release];
}
#pragma mark NSString的copy 浅拷贝(新旧指针指向的字符串都不能改变,所以没必要生成新的对象)
void stringCopy(){
//不可变字符串
NSString *old = [[NSString alloc] initWithFormat:@"Jack"];
// 在这种情况(返回对象本身)下,相当于retain
NSString *new = [old copy];
NSLog(@"new-%d", [new retainCount]);
NSLog(@"old-%d", [old retainCount]);
NSLog(@"old=%p", old);
NSLog(@"new=%p", new);
NSLog(@"old=%@", old);
NSLog(@"new=%@", new);
//[old release];
[new release];
[old release];
}
在非ARC的情况下:
①、copy:release旧值,copy新值
②、assign:直接赋值
③、retain:release旧值,retain新值
在ARC的情况下:
①、copy:release旧值,copy新值
②、assign:用在基本数据类型上
③、strong:强引用,类似于retain
③、weak:类似于assign(用在对象身上)
使用retain后生成的set方法如下:
- (void)setName:(NSString *)name{
if (_name != name)
{
[_name release];
_name = [name copy];
}
}
使用copy后生成的set方法如下:
- (void)setName:(NSString *)name{
if (_name != name)
{
[_name release];
_name = [name copy];
}
}
总结:基本数据类型用assign,NSString用copy,ARC下如果需要得到对象的引用(引用计数器+1,宿主在,对象就不会被销毁)用strong,如果不需要则用weak。
@property的参数的更多相关文章
- Objective-C 【@property 的参数问题】
------------------------------------------- @property参数 总的来说,这是一种编译器的特性(在生成@property的时候为@property添加相 ...
- strong,weak, retain, assign的区别@property的参数
strong,weak, retain, assign的区别@property的参数 先说经验 使用场合 copy:NSString,block, weak:UI控件,代理 strong:一般对象.自 ...
- objective-c在Xcode中@property相关参数的解释
objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法. 如: @interface Person ...
- 五、@property的参数
格式:@property(参数1,参数2)类型 名字: 参数可有可无 如:@property int age; @property (nonatomic,retain) UIButton* btn; ...
- property相关参数介绍
1.copy 使用类型 :NSString,block 2.assign使用类型 :delegate,int,float,NSInteger,bool,枚举,结构体... 3.retain使用类型 : ...
- OC基础--内存管理中的@property关键字以及其参数
在上一篇博客中整理的内存管理,管理类的代码量会感觉很大,而且如果对象多的话,感觉到代码有点冗余.下面就介绍Xcode中为我们自动生成内存管理代码的关键字@property 例如:在Person这个类中 ...
- @property在内存管理中的参数问题
// // Created by wanghy on 15/8/14. // // /* retain : release旧值,retain新值(用于OC对象),要配合nonatomic使用. ass ...
- OC语法7——内存管理之@property参数
@property的参数: 我们已经知道为了给开发者提供便捷,OC提供了@porperty关键字,它可以自动生成属性的set和get方法. 但是我们又知道,在OC中还面临者对象内存管理的问题,而且我们 ...
- Zookeeper + Hadoop2.6 集群HA + spark1.6完整搭建与所有参数解析
废话就不多说了,直接开始啦~ 安装环境变量: 使用linx下的解压软件,解压找到里面的install 或者 ls 运行这个进行安装 yum install gcc yum install gcc-c+ ...
随机推荐
- 实战分享:如何成功防护1.2T国内已知最大流量DDoS攻击
作者:腾讯云宙斯盾安全团队&腾讯安全平台部 引言: DDoS攻击势头愈演愈烈,除了攻击手法的多样化发展之外,最直接的还是攻击流量的成倍增长.3月份国内的最大规模DDoS攻击纪录还停留在数百G规 ...
- python内置方法
1. 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法"的特殊方法. 它们经常是 ...
- Shiro整合Spring
首先需要添加shiro的spring整合包. 要想在WEB应用中整合Spring和Shiro的话,首先需要添加一个由spring代理的过滤器如下: <!-- The filter-name ma ...
- [ZJOI 2015]幻想乡战略游戏
Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来, ...
- [USACO 13NOV]No Change
Description Farmer John is at the market to purchase supplies for his farm. He has in his pocket K c ...
- [SCOI2016]幸运数字
题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望 ...
- 【线段树】【BZOJ1798】【AHOI2009】维护序列
还是那个学弟@lher出的丧题之一. 链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1798 题意简析:就是题目啊... 解题思路:显然是线段树 ...
- 认识Json解析json生成json
.markdown-body hr::after,.markdown-body::after { clear: both } .loopLine,.messageLine0 { } .markdown ...
- Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down
Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offli ...
- Java锁机制了解一下
前言 回顾前面: 多线程三分钟就可以入个门了! Thread源码剖析 多线程基础必要知识点!看了学习多线程事半功倍 只有光头才能变强! 本文章主要讲的是Java多线程加锁机制,有两种: Synchro ...