【发布时间】:2014-06-25 19:44:51
【问题描述】:
下面是简单的代码:
// let's assume that I have to allocate this variable with alloc/init
NSString *someString = [[NSString alloc] initWithFormat:"%@", @"someString"];
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[someClass someFunction: someString];
}];
[queue addOperation:op]
[someString release];
由于 someString 被释放,当运行 nsblockoperation 时,此代码将崩溃。 防止这种情况的最佳做法是什么?
谢谢。
编辑:ARC 不是一个选择,因为这不是我的决定。有什么办法可以在 MRC 中解决这个问题?
EDIT2:下面的代码呢?行得通吗?
// let's assume that I have to allocate this variable with alloc/init
NSString *someString = [[NSString alloc] initWithFormat:"%@", @"someString"];
[someString retain]
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[someClass someFunction: someString];
[someString release]
}];
[queue addOperation:op]
[someString release];
【问题讨论】:
-
你到底为什么不使用 ARC?
-
如果这不是你的决定,那就拿起一把锤子,尽可能地用力敲打想要使用 MMR 的人的头部。
-
感谢您的建议。不幸的是,这也不是一个选择。还有其他选择吗??
-
可以在文件级别关闭/打开 ARC。也许在这种情况下使用 ARC。它会让你头疼。也就是说,如果该操作从未执行(例如:被取消),您可能会在这里发生泄漏。此外,在分配后无需添加额外的保留 - 只需省略它和释放(在 addOperation 之后)。但是,如果操作被取消,则没有简单的方法来解决释放字符串的情况。您可能最好创建自己的 NSOperation 类,该类保留字符串并在操作被释放时释放它。
标签: ios nsoperation nsblockoperation