我使用自定义类作为UITableView上的委托和数据源。我在viewDidLoad方法中做了(类似的事情):
MyClass *myObject = [[MyClass alloc] init];
tableViewOutlet.delegate = myObject;
tableViewOutlet.dataSource = myObject;
当然我需要减少myObject上的保留计数吗?但是在这里调用[myObject release]会产生非常糟糕的结果 - 委托在表完成之前就被销毁了。
我试过了
MyClass *myObject = [[[MyClass alloc] init] autorelease];
但也会产生可怕的后果。
我这里有内存泄漏吗?如果是这样,我如何以及何时安全地释放代表?
答案 0 :(得分:2)
通过在myObject
(@interface
文件)中声明实例变量来.h
,然后调用...
[myObject release];
..在您的dealloc
方法中。
答案 1 :(得分:2)
您的界面文件:
@interface SomeClass: NSObject {
MyClass *myObject;
}
@property (nonatomic,retain) MyClass *myObject;
@end
您的实施文件:
@implementation SomeClass
@synthesize myObject;
-(void)dealloc {
// if you want to be safe, change tableViewOutlet properties...
// tableViewOutlet.delegate = nil;
// tableViewOutlet.dataSource = nil;
[myObject release]; // retain = 0
[super dealloc];
}
...
MyClass *obj = [[MyClass alloc] init]; // retain = 1
self.myObject = obj; // retain = 2
// NOTE: if you instead write: myObject = obj; **NO** retain msg will be sent.
// *not* what you want in this context.
tableViewOutlet.delegate = obj; // assign, so retain =2
tableViewOutlet.dataSource = obj; // assign, so retain = 2
[obj release]; // retain = 1
...
@end