何时使用[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];

这种用法。

时间: 2024-10-09 00:01:59

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

Hibernate - HHH000352: Unable to release batch statement

这是hibernate的一个bug,具体看https://hibernate.atlassian.net/browse/HHH-11732?attachmentViewMode=list When using stateless session with jdbc batch size we get an HHH000352: Unable to release batch statement.. error in session.close() after rollback: Code:Con

Oracle Database 12c Release 1下载安装(自身经历)

1.访问Oracle官网:https://www.oracle.com/index.html,下载Oracle Database 12c Release 1 (注意:File1和File2都要下载!!不然后期安装会报一堆错误,可参考:http://www.2cto.com/database/201503/386272.html) 2.将文件解压,把winx64_12102_database_2of2文件夹中database\stage\components目录下的所有文件夹,复制到winx64_

Eclipse-Mars Release (4.5.0)创建Maven项目报错

1.Eclipseb版本为Mars Release (4.5.0) 2.报错内容 Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of its dependencies could not be resolved:.................................... 3.解决方法 找到本地仓库位置,将仓库中的/org/apache

cmake Debug模式和Release模式

在cmake中要编译debug模式的话,在CMakeLists.txt中添加如下两行 (不写就用默认的值) SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb ") SET(CMAKE_CXX_FLAGS_RELEASE "${ENV{CXXFLAGS} -O3 -Wall") 然后,在编译的时候,使用如下命令: cmake -DCMAKE_BUILD_TYPE=Debug/Release  pa

Yasm 1.3.0 Release Notes

http://yasm.tortall.net/releases/Release1.3.0.html Target Audience Welcome to the 1.3.0 release of the Yasm Modular Assembler. Its target audience includes people who want to: use a mature NASM-syntax x86 and AMD64 assembler that can target Win32, Wi

jar包版本介绍(beta,alpha,release),软件的版本介绍

α(Alpha) 此版本表示该软件仅仅是一个初步完成品,通常只在软件开发者内部交流,也有很少一部分发布给专业测试人员.一般而言,该版本软件的bug(漏洞)较多,普通用户最好不要安装.主要是开发者自己对产品进行测试,检查产品是否存在缺陷.错误,验证产品功能与说明书.用户手册是否一致. β(beta) 该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过大规模的发布测试来进一步消除.这一版本通常由软件公司免费发布,用户可从相关的站点下载.通过一些专业爱好者的测试,将结果

maven snapshot和release版本的区别

Maven的Snapshot版本与Release版本 1. Snapshot版本代表不稳定.尚处于开发中的版本 2. Release版本则代表稳定的版本 3. 什么情况下该用SNAPSHOT? 协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNAPSHOT来标识自己.这种做法的必要性可以反证如下: a.如果B不用SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用. b.如果B不用SNAPSHOT, 但一直使用一个单一

delphi debug release区别是什么?

疯狂delphi delphiXE7.XE8.XE10公开课A 群号:58592705 delphi debug release区别是什么? 1. 基础知识介绍:Debug编译:是为了便于程序调试,所以目标代码里附加有许多额外的东西.Release编译:是产品可作为正式拷贝发布了,已经不需要那些仅为调试而编译进去东西.(在 Release 状态下发布的 dcu 或 exe 会更小.更优化.) 新建一个工程, Delphi 默认的是调试(Debug)状态.当发布软件时应该切换到发布(Release

关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别

相信对于很多刚接触打包程序的同志来说,关于x86,x64,Any CPU这三个项目平台,以及解决方案配置Debug和Release有什么区别?这个问题一定有许多的困惑,甚至不乏一些已经工作了很久的老程序猿来说都是一个模棱两可的问题.当然,我也是捣腾了好久,才渐渐搞明白它们的区别,以此作个总结: 一 .x86.x64.Any CPU的区别 1.简单的说,它们之间最直接的区别就是:x86平台编译出来的exe(可执行文件)或dll(动态链接库)都是32位的.以此类推,x64对应的则是64位的.而Any

oneM2M启动Release 3标准化,华为引领物联网技术布局

http://developer.huawei.com/cn/ict/news/cn/2016/06/onem2m [韩国,首尔,2016年6月] 国际权威的物联网组织oneM2M召开第23次技术全会,Release 3新版本的标准化工作被正式提上日程.在华为主导提议下,面向垂直行业应用的数据分发服务DDS应用.和支持异构设备接入的开放服务网关OSGi互通成为oneM2M Release 3率先成立的两个特性项目,华为同时担任这两个项目的报告人职位. 华为云核心网标准总监张朝辉介绍:“物联网产业