【发布时间】:2011-05-18 03:46:30
【问题描述】:
谁能帮我弄清楚我应该在哪里发布exerciseArray?我在dealloc 中遇到了崩溃,当我在调用sortedArray 之前释放时。此代码被多次调用。
//Set exerciseArray
review.exerciseArray = [[workout assignedExercises] allObjects];
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"viewWillAppear");
NSString *workoutName = [event.assignedWorkout valueForKey:@"name"];
self.title = workoutName ;
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"index"
ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
[sortedArray release];
sortedArray= [exerciseArray sortedArrayUsingDescriptors:sortDescriptors];
NSLog(@"*****SORTEDARRAY****** %d",[sortedArray retainCount]);
for (Exercise *ex in sortedArray){
NSLog(@"%@ %@ %@",ex.name , ex.repCount, ex.weight);
}
NSLog(@"*********************");
[sortedArray retain];
[self.tableView reloadData];
}
- (void)dealloc {
[super dealloc];
[managedObjectContext release];
[event release];
}
【问题讨论】:
-
移动
[super dealloc],所以它是你的dealloc处理程序中的最后一件事。 -
为什么会有不同?
-
“超级”是保存您自己的对象的容器,因此在执行
[super dealloc]之后,您自己的成员变量将不再可访问——因此当您尝试释放它们时会出现错误。先释放自己的变量,最后告诉super释放。有关更多信息,请参阅此主题:stackoverflow.com/questions/3523576/… -
@Steve:为了将来,请考虑将制表符转换为空格,然后再发帖;自动格式化程序不适用于行首的制表符,而且您的代码看起来很有趣。谢谢!
-
@Josh 没问题,感谢您的提示。
标签: objective-c ios memory-management dealloc