【发布时间】:2011-04-07 18:42:05
【问题描述】:
假设您有班级在其他线程上做某事。并且有自己的代表。
@protocol XRequestDelegate;
@interface XRequest : NSObject {
id<XRequestDelegate> delegate;
}
@property (nonatomic, retain) id<XRequestDelegate> delegate;
- (void) doSomething;
@end
@protocol XRequestDelegate <NSObject>
- (void)request:(XRequest *)request didFinish:(id)object;
- (void)request:(XRequest *)request didFailWithError:(NSError*)error;
@end
doSomething 最终会调用 request:didFinish: 或 request:didFailWithError:
让我们在我们的对象中使用这个类;
- (void)doRequest
{
XRequest *request = [[XRequest alloc] init];
[request setDelegate:self];
[request doSomething];
}
- (void)request:(XRequest *)request didFinish:(id)object
{
// Use object whatever you want
[request release];
}
- (void)request:(XRequest *)request didFailWithError:(NSError *)error
{
//Log Error
[request release];
}
我们有一个XRequest 的实例分配并最终在方法中释放。
我们可以说这是一种错误的内存管理方式吗?我们是否应该扩大XRequest对象的范围?
【问题讨论】:
-
在这种情况下,我会将 doSomething 设为类方法 (+)。否则,您需要实例化一个除了实例化另一个对象之外什么都不做的对象。
标签: objective-c memory-management protocols