Я потратил часы на это и читал каждый бит в Интернете об управлении памятью, зомби. утечки (проверенные инструменты). Но я не могу понять это. У кого-то есть подсказка? Я получаю EXC_BAD_ACCESS в следующем, похожем на код при извлечении ChildViewController.
[profileVO release]; profileVO = nil;
Я чувствую, что следую всем рекомендациям по управлению памятью!
подробности:
У меня есть файл модели. (CachedProfileVO)
CachedProfileVO.h
@interface CachedProfileVO : NSObject {
NSString *name;
NSString *email;
}
@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *email;
@end
CachedProfileVO.m
@synthesize name, email;
- (void) dealloc
{
[super dealloc];
[name release]; name= nil;
[email release]; email = nil;
}
Теперь у меня есть UINavigationController. ParentViewController и ChildViewController.
Я вызываю ChildViewController следующим образом:
[self.navigationCntroller pushViewcontroller:childViewcontroller animated:YES];
В ChildViewController я в основном использую модель CachedProfileVO. Однако, когда этот контроллер представления отключен (кнопка возврата на пользовательском интерфейсе), он дает EXC_BAD_ACCESS
ChildViewController.h
@interface ChildViewcontroller : UITableViewController {
CachedProfileVO *profileVO;
}
@property (nonatomic, retain) CachedProfileVO *profileVO;
@end
ChildViewController.m
@synthesize profileVO;
- (void) dealloc
{
[super dealloc];
[profileVO release]; profileVO = nil; ****** GETTING EXE_BAD_ACCESS here
}
- (void) viewDidLoad
{
CachedProfileVO *vo = [CachedProfileVO alloc] init];
self.profileVO = vo;
[vo release];
}
//responseString looks like this: [Murdoch, murdoch@email.com][other data][more data]
- (void) populateProfile:(NSString *) responseString
{
NSMutableString *str = [[NSMutableString alloc] initWithCapacity:20];
[str setString:responseString];
[str deleteCharactersInRange: NSMakeRange(0,1)];
[str deleteCharactersInRange: NSMakeRange([str length]-1,1)];
NSArray *tempArray = [str componentsSeparatedByString: @"]["];
NSString *tempStr = (NSString*)[tempArray objectAtIndex:0];
NSArray *bioArray = [tempStr componentsSeparatedByString:@","];
self.profileVO.name = (NSString*)[bioArray objectAtIndex:0];
self.profileVO.email= (NSString*)[bioArray objectAtIndex:1];
[str release]; str = nil;
}
Обратите внимание, что функция populateProfile вызывается после некоторого события. Я знаю, что это называется. И Deloloc тогда вызывает проблему. Также это не случается в каждой популярности. Я должен попытаться воспроизвести несколько раз. Он никогда не воспроизводится с использованием зомби в инструментах !!!