何时使用[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: 572064792 | Nodejs:329118122 做人要厚道,转载请注明出处!










本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/sunshine-anycall/p/4149043.html ,如需转载请自行联系原作者

相关文章
|
5月前
|
算法 Java API
AJDK 8.0.0 Release Notes
AJDK 8.0.0 Release Notes
50 0
|
5月前
|
Ubuntu Linux
仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu una Release” 没有 Release 文件
仓库 “https://mirrors.aliyun.com/docker-ce/linux/ubuntu una Release” 没有 Release 文件
171 0
|
8月前
|
存储 缓存 运维
2023-5-19-Debug和Release到底有多少不同?
2023-5-19-Debug和Release到底有多少不同?
166 0
|
安全 Java 开发工具
Android签名详解(debug和release)
Android签名详解(debug和release) 1. 为什么要签名 1) 发送者的身份认证 由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换 2) 保证信息传输的完整性 签名对于包中的每个文件进行处理,以此确保包中内容不被替换 3) 防止交易中的抵赖发生,Market对软件的要求 2.
1769 0
RELEASE版本的RegisterClass()失败
RELEASE版本的RegisterClass()失败
66 0
|
网络协议 网络安全 C语言
NETMF Versions 4.1 Release 发布
NETMF Versions 4.1 Release 发布
654 0
|
调度 容器 Perl
寻找 K8s 1.14 Release 里的“蚌中之珠”
K8s 1.14 发布了,Release Note那么长,我们该从何读起?
9551 0
debug版本和release版本
运行代码 #include using namespace std; static void prindAddress(int a, int b, int c){ cout
1187 0
|
容器
CloudProvider Release Notes
阿里云容器服务 CloudProvider release notes 2018-06-25 支持service.beta.kubernetes.io/alicloud-loadbalancer-backend-labelannotation让用户能够根据node的标签来指定SLB挂载哪些节点作为后端。
3312 0
|
虚拟化 C++
黄军雷 ©️ V3.7 Release 2018-06-16
一个人可以如同产品一样去经营和管理,在生日之际梳理新版的点点滴滴。 一、What's New? 新角色 新挑战:初为人父,感叹女儿每天的努力,向其学习! 新部门 新伙伴:面对近百人的研发团队,如何推动大家高效协作? 二、企业级项目管理能力 PMP...
945 0