这样的语句
乍看上去让人很困惑。
从release方法本身的作用上来说,就是给self的引用技术减一,就像release对其他对象所做的一样。
一般来说,唯一用到,也是最合适使用
这一写法的地方是在initXXX方法中。
在初始化方法中创建对象失败,并需要返回nil,同时销毁刚刚创建的对象的时候。
比如,要求初始化方法在调用是必须提供合适的参数时,可以这样使用
。
eg:
- - (id)initWithFoo:(Foo *)foo {
- if (!foo) {//foo is required to be non-nil!
- [self release];
- return nil;
- }
- //proceed with initialization
- return self;
- }
|
在fmdb的队列初始化方法中也有同样的应用:
- - (id)initWithPath:(NSString*)aPath {
- self = [super init];
- if (self != nil) {
- _db = [FMDatabase databaseWithPath:aPath];
- FMDBRetain(_db); //在非arc环境中等于[_db retain]
- if (![_db open]) {
- NSLog(@"Could not create database queue for path %@", aPath);
- FMDBRelease(self); //在非arc环境中等于[self release]
- return 0x00; //返回空
- }
- _path = FMDBReturnRetained(aPath);
- _queue = dispatch_queue_create([[NSString stringWithFormat:@"fmdb.%@", self] UTF8String], NULL);
- }
- return self;
- }
|
其他情况下几乎不用考虑
这种用法。
欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 572064792 | Nodejs:329118122
做人要厚道,转载请注明出处!