- 浏览: 712809 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
javenwong:
你好,我现在需要给一个Composite做圆角处理,不知道怎么 ...
SWT圆角窗口绘制 -
whao189:
回家了详细看看
Storyboard 解析 -
zhaoyubetter:
确实够麻烦
IOS 开发环境,证书和授权文件是什么? -
datawarehouse:
一直对这两个认为是一样的,现在学习了。
Oracle DB中的Schema -
yulanfeiyang:
顶,mark
下载音频,在IOS设备上播放
比如一个NSString 对象,地址为0×1111 ,内容为@”STR” Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化 retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 retain 是指针拷贝,copy 是内容拷贝 下面分享一个网友的总结 一直以来个人觉得如果一个类是的property是readonly的那么再指定其他的如assign/retain/copy这样的属性就实在是没有什么意义了。确实你想想既然都readonly了,肯定是没有setter的,既然没有setter那么谈assign/retain/copy又有什么意义呢?所以一直以来我从来不对readonly的property加retain/copy属性申明,默认assign就足够了,simple is beautiful! 但是我现在发现我错了,其实一直都有一种这种感觉,只是没有找到100%的充分理由为readonly加上retain/copy。但是假如你要在你的subclass改写property,而加入你要改写的是一个NSString,你像把这个属性设置为readwrite和copy,往往杯具就发生了,编译时候可恶的warning 产生了,因为copy和之前默认的assign明显不相同啊! 终上,不论什么时候,都要为你的readonly的对象属性加上合适的retain/copy申明。你现在不用,但不说明你将来就不会用,出来混迟早都要还的! http://baike.baidu.com/view/5028218.htm 原来简单解释过属性定义(Property) ,并且提起了简单的retain,copy,assign的区别。那究竟是有什么区别呢? assign就不用说了,因为基本上是为简单数据类型准备的,而不是NS对象们。 Retain vs. Copy!! 那上面的是什么该死的意思呢? Copy其实是建立了一个相同的对象,而retain不是: 比如一个NSString 对象,地址为0×1111 ,内容为@”STR” Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化 retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1 也就是说,retain 是指针拷贝,copy 是内容拷贝。哇,比想象的简单多了… ------------------------------------------------------------------------------------------------------ 上面这篇文章来自:http://c.gzl.name/archives/339 自己研究了一下,,上面文章的说法是对的,,但是遗漏了一点东西. 他说 copy是内容的拷贝 ,对于像NSString,的确是这样. 但是,如果是copy的是一个NSArray呢?比如, NSArray *array = [NSArray arrayWithObjects:@"hello",@"world",@"baby"]; NSArray *array2 = [array copy]; 这个时候,,系统的确是为array2开辟了一块内存空间,但是我们要认识到的是,array2中的每个元素,,只是copy了指向array中相对应元素的指针.这便是所谓的"浅复制".了解到这一点非常重要.... @property (参数1,参数2) 类型 名字; 这里我们主要分析在括号中放入的参数,主要有以下三种: setter/getter方法(assign/retain/copy) 其中各参数说明如下: assign @property (nonatomic,retain)中的nonatom和retain是什么意思 @synthesize xxx; 为这个心属性自动生成读写函数; 如果你不懂怎么使用他们,那么就这样 ->
读写属性(readwrite/readonly)
atomicity(nonatomic)
默认类型,setter方法直接赋值,而不进行retain操作
retain
setter方法对参数进行release旧值,再retain新值,如下代码:
copy
setter方法进行Copy操作,与retain一样
nonatomic
1,getter=getterName,setter=setterName,设置setter与getter的方法名
2,readwrite,readonly,设置可供访问级别
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级。
发表评论
-
iphone编程之UILabel 用法详解
2012-12-18 14:38 1409这段代码动态的创建了一个UILabel,并且把相关常用的属 ... -
IOS用正则验证手机号
2012-12-14 12:01 17216- (BOOL)validateMobile:(NSStr ... -
UITableView技巧之去除UITableViewCell边框
2012-12-14 10:42 3612有时候想在UITableViewCell中加内容,但又不想要c ... -
MAC MySQL Workbench执行批量更新和删除的时候错误解决
2012-10-25 11:21 4005处理MySQL更新表时ErrorCode:1175.You a ... -
Objective-C编码风格指南
2012-10-17 17:00 1242参考资料: • Apple: Coding Guideline ... -
autorelease对象具体什么时候释放?
2012-09-19 15:21 1048在项目中,会有一个默认的Autorelease pool,程序 ... -
Objective-C内存管理教程和原理剖析
2012-09-10 14:44 902此文涉及的内存管理是针对于继承于NSObject的Clas ... -
IOS开发内存释放小结
2012-09-03 17:34 5370内存释放是iphone开发过程中比较重的地方,所以在开辟内存后 ... -
为什么Android没有iOS那么顺滑
2012-08-29 14:38 908虽然很多Android手机的配 ... -
UITextView关闭键盘
2012-08-29 14:13 142161.如果你程序是有导航条的,可以在导航条上面加多一个Done的 ... -
Mac系统下查看鼠标所在点的RGB值--数码测色计
2012-08-29 14:05 1799苹果电脑的Mac OS X系统自带鼠标所在点颜色RGB值查看工 ... -
UIView你知道多少
2012-08-21 09:49 866曾经有人这么说过,在i ... -
Objective-C内存管理总结〜CC专版
2012-08-17 18:24 838iPhone系统中的Objective-C的内存管理机制是比较 ... -
iOS内存管理
2012-08-17 18:19 28441. 内总管理原则(引用计数) IOS的对象都继承于 ... -
IOS 获取当前系统时间的年、月、日、小时、分、秒
2012-08-14 17:33 6630NSCalendar *calendar = [[NSCa ... -
IOS判断是否为数字
2012-08-13 17:59 4918判断是否为整形: - (BOOL)isPureInt:(N ... -
self.用法
2012-08-09 14:55 852MyClass.h @interface MyClass ... -
#import与@class的区别
2012-08-08 17:13 9441.import会包含这个类的所有信息,包括实体变量和方法,而 ... -
iphone图标去掉光晕效果
2012-08-07 16:53 1163图片背景是透明的 如果想去掉光晕效果,就在info.plist ... -
去掉 App Store 内图标上部高亮效果的办法
2012-08-07 16:52 899苹果默认会在 App Store 里的应用图标上半部自 ...
相关推荐
在iOS开发中,Objective-C语言提供了@property关键字来声明属性,并且可以在属性声明时指定不同的内存管理行为,主要涉及到assign、retain和copy这三个关键字。为了深入理解这三者的区别,首先需要了解Objective-C的...
本文将详细解释`retain`和`assign`的区别,以及其他相关的属性修饰符如`readonly`、`readwrite`、`nonatomic`等,帮助读者更好地理解这些关键字的作用及其应用场景。 #### `retain`与`assign` **1. `retain`** - *...
本篇文章详细介绍了iOS开发中的一些常见属性设置,包括readwrite、readonly、retain、copy、assign以及nonatomic。 1. 可读性: - `readwrite`:这是变量的默认属性,如果没有明确指定其他属性,变量就会具有读写...
retain,strong, copy,weak,assign,readonly, readwrite, unsafe_unretained 下面来分别讲讲各自的作用和区别: retain,计数器加1, (增加一个指向内存的指针) 对应release(计数器-1) setter 方法对参数进行 ...
在OC中,我们可以为属性指定不同的属性修饰符,如`retain`、`copy`、`assign`等,以及`readwrite`、`readonly`和`atomic`、`nonatomic`。下面将详细介绍这些修饰符的意义和用法。 ### `assign` `assign`是最简单的...
1. **读写属性(readwrite/readonly)**: - `readwrite`:默认值,会自动生成getter和setter方法,属性可读可写。 - `readonly`:只生成getter方法,没有setter方法,意味着属性是只读的。 2. **setter语意...
iOS 中的属性可以分为六种:readwrite、readonly、assign、retain、copy、nonatomic。每种属性都有其特定的作用和使用场景: * readwrite:同时生成 get 方法和 set 方法的声明和实现。 * readonly:只生成 get ...
- 文档中提到了几种属性关键字:readwrite, readonly, assign, retain, copy, nonatomic。 - readwrite和readonly用于指定属性是否可读写,readwrite可以读写,而readonly只能读。 - assign通常用于基本数据类型...
#### 三、属性 `readwrite`,`readonly`,`assign`,`retain`,`copy`,`nonatomic` 各是什么作用,在那种情况下用? - **`readwrite`**: - 默认属性,表示同时生成get方法和set方法。 - 适用于需要可读写属性的...
- **`readwrite`/`readonly`**:`readwrite`表示属性既有setter也有getter方法,允许外部修改该属性的值;`readonly`表示只有getter方法,不允许外部修改该属性的值。 - **`assign`**:用于基本数据类型如`int`、`...
- **readwrite、readonly:** - `readwrite`:默认属性,表示属性既可以通过getter获取也可以通过setter修改。 - `readonly`:只允许通过getter获取属性值,不允许通过setter修改。 - **nonatomic、atomic:** - ...
property的属性可以设置为readonly、readwrite、assign、retain、copy等。使用NSValue类的实例可以代表其他类型的数据。确定对象相等通常使用isEqual方法。 在iOS用户界面设计方面,设置圆角、使用自定义字体、后台...
- **readwrite/readonly**:读写权限,`readwrite`表示既有setter又有getter,`readonly`只有getter没有setter。默认是`readwrite`。 - **assign/reteain/copy**:内存管理策略。`assign`适用于非对象类型,不改变...
1. 读写权限:readonly(只读)和readwrite(默认,读写)。 2. 原子性:atomic(默认,线程安全但效率较低)和nonatomic(非原子性,效率高但不保证线程安全)。 3. 引用计数:retain(或strong)用于增加对象的...
- **readwrite**: 默认属性,意味着同时生成getter和setter方法。 - **readonly**: 只生成getter方法,不允许外部通过setter方法修改该属性。 - **assign**: 直接将传入值赋给实例变量,适用于基本数据类型或不可变...
`readwrite`提供读写访问,适用于需要getter和setter的情况;`readonly`只提供getter,不生成setter;`assign`用于非对象属性,不保留引用计数;`retain`和`copy`用于对象属性,`retain`增加对象的引用计数,`copy`...
- `readwrite`:默认的属性特性,提供getter和setter方法。 - `readonly`:只提供getter方法,不允许外界修改属性。 - `assign`:简单赋值,不会增加引用计数。 - `retain`:在setter中会对传入的对象进行retain...
- **readWrite**:提供读写访问,生成getter和setter方法,且实例变量可通过`_ivar`访问。对于静态库,即使公开了头文件,也无法修改其属性。 - **readOnly**:只提供读取访问,仅生成getter方法。若想实现私有...