iOS中copy,retain,strong,assign,weak的区别以及使用

使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
使用copy: 对NSString
使用retain: 对其他NSObject和其子类

assign就是简单的赋值,不更改引用计数,所以直接使用基础数据

copy是直接拷贝内容,成为一个新的对象。

retain释放旧的对象,将旧对象的值赋给新的对象,并使新的对象的引用计数加1

retain是指针拷贝 copy是分配新的内存属于内容拷贝,在拷贝之前都会释放旧的对象

在ARC中,retain和strong是一致的(声明为强引用);assign和weak是基本一致的(声明为弱引用)

=======弱引用(weak,assign)的出现缘由,以及区别=======================================

弱引用的出现缘由:防止循环应用。

强引用循环:A对象强引用了B对象,B对象也强引用了A。因为都是强引用,也就是无论是A是B都要在对方的引用断了后才能销毁,但要断了引用,就必须对方对象销毁。就会出现这种僵局,为了避免出现这种情况,就应该有一个对象“示弱”,使其为“弱引用”。 weak和assign的区别就是当对象被销毁后,weak会把指针指向的对象置为nil,而assign却不会,所以assign会引起野指针,比较危险。

比较常见的,视图中的父子视图之间的引用:父视图强引用子视图,子视图弱引用父视图。

===atomic与nonatomic====================================================

atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。

时间: 2024-10-03 22:15:59

iOS中copy,retain,strong,assign,weak的区别以及使用的相关文章

iOS中copy和strong修饰变量的区别

大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢? 比如:@property (retain,nonatomic) NSString *rStr;@property (copy, nonatomic)   NSString *cStr; - (void)test:{    NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];    self.rStr   = m

iOS开发-assign、retain、copy、strong、weak的区别

对于初学的开发者,对于assign.retain.copy.strong.weak的用法及意义可能不是很明白,我对于这个问题也研究了很久,写篇博文,巧巧代码,让我们来瞧瞧吧! 先定义一个Student类: #import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic, copy) NSString *name; @end 然后先是mrc下的assign声明 @property (nona

IOS内存管理retain,assign,copy,strong,weak

IOS内存管理retain,assign,copy,strong,weak IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用计数+1copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来对象计数不变 release 对象引用计数-1 如果为

assign/copy/retain/strong/weak/readyonly/readwrite/nonatomic/atomic

arc其实并不是所谓的垃圾回收机制,其实arc只是编译器的一种特性,编译器会在编译阶段插入相应的内存管理代码,以实现自动的内存管理,这样就减少了因为程序员的一时疏忽或者项目过大而失误从而造成内存泄露,因为是编译器自动完成的代码插入所以arc的效率要高于垃圾回收机制. 在arc机制下dealloc中会由编译器自动插入释放属性的代码因此也不需要手动调用[super dealloc],当然arc只能管理foundation层的对象对于core foundation层的变量需要程序员手动去释放或者使用桥

iOS 开发 property,strong,weak,retain,assign,copy,nomatic 的区别及使用

1:ARC环境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的.xcode 4.3(ios5和以上版本)之后就有了ARC,并且开始使用 strong与weak 2:weak的作用:在ARC环境下,所有指向这个对象的weak指针都将被置为nil.这个T特性很有用,相信很多开发者都被指针指向已释放的对象所造成的EXC_BAD_ACCESS困扰过,使用ARC以后,不论是str

IOS学习5-strong/weak/copy

strong.weak,copy的详解 对象使用strong,ui控件使用weak,字符串用copy 现在使用ARC,ARC判断准则:只要没有强指针指向对象中,找个对象就会被销毁. 1. Strong/weak 默认情况下下是强指针 Person *person = [[Person alloc] init]; 弱指针使用_weak修饰 对象使用strong,为了保证对象在属性也在. 如果:对象中有个属性是_weak类型,那么可能该属性指向的对象已经被销毁,而引发问题. 注意循环引用引发内存泄漏

iOS中JSON解析和XML解析的区别

iOS中网络传输的格式可粗略的分为XML和JSON两种,具体的传输方式又可分为GET和POST. 其中XML格式是最早出现的,但是由于复杂,并且占用字节数相对较大,故不太适合移动端,后来简化为JSON格式. JSON本身的数据结构只有字典和数组两种,在IOS5以后出现了原生解析,而之前则有SBJson和JsonKit第三方库解析. SBJson和JsonKit的特点: 1.第三方库解析SBJson是所有解析效率里面最低的,之所以能够广泛普及,是因为其简单,封装的低耦合性,可以快速抽离出一个类,在

转 iOS:ARC相关知识,assign/copy/retain/strong/weak/readyonly/readwrite/nonatomic/atomic

    自动引用计数 ARC不是垃圾回收,而是编译器自动插入代码来减少程序员的代码输入和失误.     同时比垃圾和效率要高,因为其不影响运行时间,相当于自己管理内存.     总是通过属性来管理实例变量(init/dealloc除外),在dealloc中释放所有属性. dealloc中会自动加入释放实例变量的代码,因此不必要手段增加释放实例变量的代码.不需要手动调用[super  dealloc]   不要调用retain,release,autorelease,编译器会自动插入相关代码. 注

readonly,readwrte,@property,nonatomic,assign,retain,copy,strong,weak属性关键字

1.readonly是只读 2.readwrite是读写 [email protected]关键字:设置成员变量的属性(有读/写,赋值assign,retain,copy ,以及对多线程的支持nonatomic). 4.nonatomic非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问. 5.assign简单赋值,不会引起引用计数的变化.适用于基础类型(NSInteger,CGFloat),C语言里的(int,double,f