1
下面是我用取消歸檔數據的代碼:崩潰而實施NSCoding協議方法釋放
- (id)initWithCoder:(NSCoder *)decoder
{
if((self = [super init]))
{
NSString *resoureItemClassName = NSStringFromClass([ResourceItem class]);
self.selectedItemClassName=[decoder decodeObjectForKey:@"selectedItemClassName"];
Class class = NSClassFromString(selectedItemClassName);
id temp = nil;
if(class)
{
temp = [[class alloc] init];
}
if(temp)
{
if([temp isKindOfClass:[NSString class]])
{
self.selectedString = [decoder decodeObjectForKey:@"selectedString"];;
self.ID = selectedString;
}
else if([selectedItemClassName isEqualToString:resoureItemClassName])
{
DLog(@"Resource item")
}
[temp release];
}
else
{
self.ID = nil;
}
}
return self;
}
當我鬆開tempObject,應用程序崩潰。如果我不這樣做,這是一個泄漏。我嘗試使用autorelease方法。它仍然墜毀?解決辦法是什麼?
UPDATE:
在selectedItemClassName的編碼數據或者是__NSCFConstantString或__NSCFString。崩潰只發生在__NSCFString而不是__NSCFConstantString作爲類名稱,
可能是什麼原因?
什麼是崩潰的對象的類型?它會一直崩潰嗎?在發佈之前打印一個'[temp className]' – Alexander
它是__NSCFString – Krishnan
同樣的問題不會發生在__NSCFConstantString – Krishnan