objective-c - 自动释放或不自动释放

标签 objective-c iphone

在核心数据编程指南的以下代码示例中,创建了 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/

相关文章:

iphone - 什么样的下载代码违反了 App Store Review Guideline?

iPhone:处理多个操作表

ios - 在没有 pod 的情况下导入 AFNetworking

ios - 在 iOS 7 上通过 NSNetService 连接到 BLE 设备并发送/读取数据

最接近枚举的 cocoa 当量

ios - 如何提取JSON数组?

objective-c - 在 Macbook PRO 中关闭 NSWindow 时 CEF 崩溃(仅在触摸板上不用于鼠标单击)

ios - 获取 '-[__NSArrayM city]: unrecognized selector sent to instance 0x111c03460' 错误

objective-c - 转换点 :

iphone - 帮助!使用 rtmp-dump 对 iphone 的 rtmp 支持