当我在启用了僵尸的 xcode 4.5.1 (LLDB) 调试器中运行不使用 ARC 的应用程序时,在调用 -[super dealloc] (-[NSObject dealloc]) 时出现两次此错误 (2):
* -[V2APIClient 类]:发送到已释放实例 0x9d865c0 的消息 * -[V2APIClient 类]:发送到已释放实例 0x9d865c0 的消息
当我在 xcode 4.4.1 (LLDB) 调试器中运行相同的应用程序时,我会收到一次错误消息 (1)。当我在 XCode 4.3.2 中运行同一应用程序的稍早版本时,我根本没有收到错误消息 (0)。我将使用相同/最新的代码重试。
仅供参考 - 这似乎与其他帖子完全相同,尚未得到回答: -[Foo class]: message sent to deallocated instance on [super dealloc])
我试图避免两次重新发布相同的问题,但建议我继续: https ://meta.stackexchange.com/questions/152226/avoiding-asking-a-question-thats-already-been-asked
另外,我也刚刚在 Apple 开发者论坛中问了同样的问题: https ://devforums.apple.com/thread/171282
最后,这是我的课的精髓:
@interface ASIHTTPRequestHandler : NSObject {
id _error;
}
@property (nonatomic,retain) id error;
@end
@implementation ASIHTTPRequestHandler
@synthesize error = _error;
-(id)init
{
self = [super init];
if (self)
{
self.error = nil;
}
return self;
}
-(void)dealloc
{
self.error = nil;
[super dealloc];// this is the line that appears to cause the problems
}
@end
请帮我解决这个问题。我不相信我违反了任何内存管理规则,但这个错误似乎暗示了其他情况。在解决这个问题之前,我很犹豫要不要签入任何新代码。
谢谢,查克
ps 为了记录,这里是调用代码:
PanoTourMgrAppDelegate *ptmAppDlgt = [PanoTourMgrAppDelegate getApplicationDelegate];
Settings *settings = ptmAppDlgt.settings;
Identification *identification = ptmAppDlgt.identification;
V2APIClient *v2ApiClient = [[V2APIClient alloc] initWithSettings:settings identification:identification];
NSDictionary *result = [v2ApiClient get_application_status];
BOOL success = [v2ApiClient callWasSuccessful:result];
if (!success)
{
id error = v2ApiClient.error;
NSString *mbTitle = nil;
NSString *mbMessage=nil;
if ([error isKindOfClass:[NSString class]])
{
mbTitle = @"Application version no longer suppported";
mbMessage = (NSString*)error;
[MessageBox showWithTitle:mbTitle message:mbMessage];
}
}
[v2ApiClient release]; // This is the line that indirectly causes the messages above