release和retain还有多少人在用】的更多相关文章

这年头,看到做IOS开发的专业公司,居然还在用release和retain这样的内存管理方式,是为了表示他很厉害吗? 我只能说他没有跟上时代的潮流,或者就是参加了某种老掉牙的IOS速成培训再入行的. 在线程中更新界面,还在用performSelectorOnMainThread,为什么不用dispatch_async(dispatch_get_main_queue(), ^{ ... })?后者有更加清晰精简的代码结构.…
OC使用引用计数来管理内存,每个继承NSObject的对象,内部都维护了一个引用计数器retainCount.当对象创建时(调用alloc或者new)引用计数器会+1, 手动调用retain()方法能够使引用计数器+1.手动调用release()方法能够使引用计数器-1,当引用计数器为0时,对象会自己主动调用"析构函数" dealloc()方法来回收资源和释放内存. 这样当一个对象被多个地方使用和管理时,能够通过retain()将引用计数器+1,来获取使用权限(防止其它使用者释放该对象…
三种情况,引出问题:   1) new出来的对象需要释放,而释放时,如果有其他人引用了这个对象,再次使用这个对象时,则会出现野指针情况. ==> 于是出现了引用计数的释放管理机制. 2) 对于一个返回对象指针的方法,你若不看文档不看内部代码,你无法知道这个指针需不需要你来释放.同样的对于将一个指针或者对象作为参数给一个方法后, 你也无法知道这个方法会不会将你的对象释放掉. ==>  于是出现了谁拥有谁释放的管理思想. 3)使用上述管理机制和思想后,有些特定情况.比如方法内新建一个对象,然后返回…
内存管理 retain和release简单使用 #import "Student.h" @implementation Student @synthesize age = _age; // 在xcode4.5环境下可以省略 - (void)dealloc { NSLog(@"%@被销毁了", self); [super dealloc]; // 一定要调用super的dealloc方法,而且最好放在最后面调用 } @end #import <Foundatio…
这样的语句   [self release]; 乍看上去让人很困惑. 从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样. 一般来说,唯一用到,也是最合适使用   [self release]; 这一写法的地方是在initXXX方法中.在初始化方法中创建对象失败,并需要返回nil,同时销毁刚刚创建的对象的时候. 比如,要求初始化方法在调用是必须提供合适的参数时,可以这样使用   [self release]; .eg:   - (id)in…
一,retain, copy, assign区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉. 2. 了解到1中assign的问题,那么如何解决?最简单的一个方法就是使用引用计数(reference countin…
前言: 三种情况,引出问题     new出来的对象需要释放,而释放时,如果有其他人引用了这个对象,再次使用这个对象时,则会导致无效指针报错.     于是有了引用计数的施放管理机制.       对于一个返回对象指针的方法.你若不看文档不看内部代码,你无法知道返回的这个指针需不需要你来释放.同样的对于将一个指针作为参数给一个方法后,你为犹豫我能不能施放这个指针.因为你不知道这个方法内部会不会将你的指针施放.     于是有了谁拥有谁施放的施放管理思想.       使用了上述管理机制和思想后,…
转自:http://lizi464789754.blog.163.com/blog/static/1689370852011924113245778/ 由于 iOS5 xcode4.2 引入了ARC (AutomicReferenceCounting) , 使用xcode4.2 新建项目时,会有一些小小的变化. NSAutoReleasePool  被 @ {Autoreleasepool / / Code for autoreleasepool } block 取代了. 新增了__strong…
- (void)setName:(NSString *)name {        推断原有对象和新对象是否是同一个对象,假设是同一个,就没有必要再又一次赋值,否则会先release 再retain,就会变成野指针 if (_name != name) { 释放保有之前对象的全部权 [_name release]; 让实例变量 _name保有新的对象的全部权 _name = [name retain]; } }…
原文链接:http://blog.sina.com.cn/s/blog_4057ab6201018y4y.html Objective C内存管理进阶(二):理解autorelease: http://www.cnblogs.com/MobileDevelop/archive/2010/07/19/1779138.html   看了上面博客中对autorelease的见解,对autorelease有了更深入的了解.但是还不是很理解,于是又看了代码.一开始对autorelease的“自动释放”的印…