何时使用[self release]

这样的语句


 

  1. [self release];

乍看上去让人很困惑。

从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样。

一般来说,唯一用到,也是最合适使用


 

  1. [self release];

这一写法的地方是在initXXX方法中。
在初始化方法中创建对象失败,并需要返回nil,同时销毁刚刚创建的对象的时候。

比如,要求初始化方法在调用是必须提供合适的参数时,可以这样使用


 

  1. [self release];


eg:


 

  1. - (id)initWithFoo:(Foo *)foo {
  2. if (!foo) {//foo is required to be non-nil!
  3. [self release];
  4. return nil;
  5. }
  6. //proceed with initialization
  7. return self;
  8. }

在fmdb的队列初始化方法中也有同样的应用:


 

  1. - (id)initWithPath:(NSString*)aPath {
  2. self = [super init];
  3. if (self != nil) {
  4. _db = [FMDatabase databaseWithPath:aPath];
  5. FMDBRetain(_db); //在非arc环境中等于[_db retain]
  6. if (![_db open]) {
  7. NSLog(@"Could not create database queue for path %@", aPath);
  8. FMDBRelease(self); //在非arc环境中等于[self release]
  9. return 0x00; //返回空
  10. }
  11. _path = FMDBReturnRetained(aPath);
  12. _queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);
  13. }
  14. return self;
  15. }

其他情况下几乎不用考虑


 [self release];

这种用法。

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/p/4149043.html

时间: 2024-11-08 19:57:56

何时使用[self release]的相关文章

Error:java: javacTask: source release 1.6 requires target release 1.6

IDEA运行web项目时报错: Error:Java: javacTask: source release 1.6 requires target release 1.6 解决方法:    

mongoDB报错Cannot find module '../build/Release/bson'

打算用nodejs写一个blog系统,发现nodejs还是存在很多的坑.在使用mongodb时遇到如下报错问题: { [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } js-bson: Failed to load c++ bson extension, using pure JS version 折腾了一番,最后是这样解决的: 找到 npm 的module mongodb ..node_

TURBOLinux 7.0下安装Oracle 8.1.7.0.1 release 3

oracle 作者:shiley 时间:2002-5-20 ------------------------------------------------------------------------------- 系统配置: CPU: RAM: 256M 目 的 : 在TURBOLinux 7.0下安装Oracle 8.1.7.0.1 release 3 企业版本数据库服务器. --------------------------------------------------------

PHP7 RC7 Release对比PHP5.6快速排序20000数据性能体验以及新语法尝鲜

最近Zend的PHP7已经 处于最后的BUG修复阶段,目前 已经更新RC7,对于Zend官方的说法PHP7的性能大约相比PHP5系列版本 提高2倍以上,增加了一些新的语法,摒弃了PHP5的一些影响性能的因素,主要增加了以下Features . Improved performance: PHP 7 is up to twice as fast as PHP 5.6 性能比5.6提高2倍 Consistent 64-bit support 64位一致性支持Many fatal errors are

Oracle 10G First Release的新特性简介(下)

oracle Oracle 10G First Release的新特性简介(下) By Fenng 2003-07-10 注:近日Oracle已经正式宣布该版本的Oracle命名为10G,其中的G为Grid之意.特此更正. 高可用性的加强 1.缩短应用和数据库升级的宕机时间 通过使用standby数据库.允许在不同版本的standby和产品数据库间切换.现有的联机重定义功能能够支持一步克隆所有相关的数据库对象. 2.回闪(Flashback)任何错误 该版本的Oracle也扩展了Flashbac

Oracle 10G First Release的新特性简介(上)

oracle Oracle 10G First Release的新特性简介(上)   By Fenng 2003-6-8   Oracle(www.oracle.com)公司早已经宣称,Oracle 9i数据库只是一个过渡性的产品,真正的技术革新很可能在下一版,也就是通常说的10i(内部可能的版本号是2003,以下简称10i,估计在正式发行的时候会有一个新的名字)中体现出来.很多技术人员可能都会比较关心Oracle 10i究竟能有哪些新功能,是否能提供一些激动人心的新特性?我们在这里对Oracl

敏捷软件开发实践-Release Process/Release Plan

介绍: 因为我们的开发周期是迭代进行的,以Sprint为单位,我们每个Sprint如何去和客户说我们的成 果呢,那么我就需要Demo和release一些新功能,或者一些bug fixing.Demo我这里不讨论了, 大体上就是部 署都服务器上然后运行下给meeting的所有人看下,我们这里主要讨论和发布(release)有关的话题. 实现方式: 话题1:我们如何让发布者知道我们这个Sprint做的功能?因为就像jdk一样,它的每次大 的release和小的release都有一些评注来说明他们这次

[你必须知道的.NET]第三十五回,判断dll是debug还是release,这是个问题

问题的提出 晚上翻着群里的聊天,发现一个有趣的问题:如何通过编码方式来判断一个dll或者exe为debug build还是release build?由于没有太多的讨论,所以我只好自己找点儿办法,试图解决这个问题,为夜生活带点刺激.于是,便有了本文的探索和分析. 当然,为了充分的调动起大家的主意,省去不必要的google操作,我觉得有必要对Debug和Release两种模式的异同进行一点提纲挈领式的分析,从而为接下来的解决方案打好基础. Debug & Release 我们应用Visual St

Xcode4.2中的release“不能”使用的理解

Automatic Reference Counting (ARC),自动引用计数,是开发Cocoa程序时的一个编译级别的特性,用于自动内存管理. 1:在XCode 4.2中,使用模板新建一个工程,该工程将"默认"选择使用ARC特性 2:对于已经建立好的项目可以 选中项目, Building Settings, 然后找到 Objective C Automatic Reference Counting(找不到,可以搜索到), 设置改为No 就行了. ----ARC理论基础--- ARC

vs2005 release/debug下拉按钮解决方案配置按钮设置

自从重新安装了VS2005后,发现原来常用的release/debug下拉按钮不见了,急啊,不方便啊,如下图: 自己找了半天也没找出来,后来问了下同事,发现这个菜单按钮名字叫:解决方案配置按钮. 有了这名字之后,一搜寻,立即就有解决方案了: 1.选择"工具". 2.选择"自定义". 3.选择"命令"选项卡. 4.从左边类别里面找到"生成". 5.选中"生成"后,在右面选择"解决方案配置"