assign与weak区别(面试)】的更多相关文章

weak 比 assign 多了一个功能就是当属性所指向的对象消失的时候(也就是内存引用计数为0)会自动赋值为 nil ,这样再向 weak 修饰的属性发送消息就不会导致野指针操作crash. 可能不太好理解下面我写了一个演示程序. OC: 12345678910111213141516171819202122232425 //// ViewController.m// weak与assgin的区别//// Created by bihongbo on 14/5/20.// Copyright…
在ARC中的assign和weak可以说非常相像,导致有很多人误以为他们是一摸一样的,在任何时候都可以划等价,但事实却不是这样. 在群里,有人问,id类型的delegate属性到底是用assign还是weak @property (weak, nonatomic) id<AnyDelegate> delegate; @property (assign, nonatomic) id<AnyDelegate> delegate; 大家众说纷纭,说都可以的,说assign的,说weak的…
• copy: 用于希望保持一份传入值的拷贝,而不是值自身的情况,即把原来的对象完整的赋值到另外一地方,重新加载一内存区,一个地方变了不影响另一个地方的对象. • assign:  简单的直接赋值,相当于说两个对象指向同个内存区,一个地方的变了,其他的也跟着改变. • retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数 为1 那上面的是什么意思呢? Copy 其实是建立了一个相同的对象,而 retain 不是: 比如一个 NSString 对象,地址为 0×1111,…
用了很久,却不知道它俩究竟有什么区别,作为一个新手来说,光会用不行,还要懂得原理. 首先说说区别:weak只可以修饰对象                    assign既可以修饰对象也可以修饰基本数据类型,如int.double和NSIntegerdeng . weak不会产生野指针问题               assign可能导致野指针问题,导致程序崩溃. 下面我们说说原因:weak弱引用,所引用对象的计数器不会加一,对象被释放时指针自动被置为nil,避免了循环引用. assign虽说…
依旧本着尊重原创和劳动者的原则,将地址先贴在前面: http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html,作者Nonato 以下内容为转载: IOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用…
引用地址:http://www.aichengxu.com/view/32930 一.assign,copy,retain 1.copy是内容复制,新建一个相同内容的不同指针,retain为指针复制,相同内容的相同指针,引用计数都加1.assign只是复制,没有引用计数. 2.retain:释放旧的对象(release),将旧对象的值赋给新对象,再令新对象引用计数为1.我理解为指针的拷贝,拷贝一份原来的指针,释放原来指针指向的对象的内容,再令指针指向新的对象内容.copy:与retain处理流程…
在objective-c中,类中的全局变量经常使用如下的方式申明. @property(nonatomic(1),strong(2))UIImageView *imageView; 其中的1,2处是对此变量的一些属性申明.有以下几种strong weakassignstrong 和 weak 是在arc后引入的关键字,strong类似于retain,引用时候会引用计算+1,weak相反,不会改变引用计数.weak和assign都是引用计算不变,两个的差别在于,weak用于object type,…
基于项目报错: WebViewJavascriptBridgeBase 中定义:@property (assign) id <WebViewJavascriptBridgeBaseDelegate> delegate; 但是dealloc中没有释放 - (void)dealloc {    self.startupMessageQueue = nil;    self.responseCallbacks = nil;    self.messageHandlers = nil;} 这个是导致e…
assign:用于“纯量类型”(如CGFloat 或 NSInteger等): strong:用于“对象类型”,定义了一种“拥有关系”(owning relationship),为这种属性设置新值时,设置方法会先保留新值,并释放旧值,然后再将新值设置上去: weak:用于“对象类型”,定义了一种“非拥有关系”(nonowning relationship),为这种属性设置新值时,设置方法既不保留新值,也不释放旧值,相当于用另一个属性指向原来的对象,关键在于当属性所指的对象被释放时,该属性值也会清…
1. 在ARC中 strong(强引用) 相当于retain, weak(弱引用) 相当于assign.ARC下,strong告诉编译器自动插入retain.但是在ARC下,代理协议的属性依然用assign,防止循环引用. 2. _unsafe_unretained与weak功能一致,区别在于当指向的对象销毁后,weak会将变量置为nil,防止野指针的出现.…