在核心数据编程指南的以下代码示例中,创建了 NSFetchRequest 使用 autorelease 而 NSSortDescriptor 不是使用 autorelease 创建的。为什么 NSSortDescriptor 没有使用 autorelease 创建?这是偏好问题吗?
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Employee"
inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
// Set example predicate and sort orderings...
NSNumber *minimumSalary = ...;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(lastName LIKE[c]'Worsley') AND (salary > %@)", minimumSalary];
[request setPredicate:predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName"
ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
NSError *error;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array == nil){
// Deal with error...
}
最佳答案
当你自动释放时,你基本上是在说:“我不再需要它了,但其他任何人都可以自由选择它(在自动释放池耗尽之前)”。当您显式释放一个对象时,您是在说:“我不再需要它,除非其他人已经另行说明(已获取),否则应该立即释放它。”
因此,自动释放通常不是错误的。当您希望将对象传递回消息的发送者而不要求发送者负责释放对象时,它是必需的。
关于objective-c - 自动释放或不自动释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165619/