下面是简单的代码:
// 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发布后运行released操作时,此代码将崩溃。防止这种情况的最佳做法是什么?
谢谢。
编辑:弧不是一个选择,因为这不是我的决定。在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];发布于 2014-06-25 19:53:09
您确实应该使用自动引用计数,并将代码简化为
// let's say the variable is allocated with alloc/init
NSString *someString = @"someString";
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[someClass someFunction: someString];
}];
[queue addOperation:op]如果您真的必须使用手动参考计数,您可以这样做:
// 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];
[someString release]
}];
[queue addOperation:op]我知道这只是个示例代码,但如果不是,你也可以这么做.;)
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[someClass someFunction:@"someString"];
}];
[queue addOperation:op]发布于 2014-06-25 20:19:44
// let's say the variable is allocated with alloc/init
NSString *someString = [[[NSString alloc] initWithFormat:"%@", @"someString"] autorelease];
NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
[someClass someFunction: someString];
}];
[queue addOperation:op];有成千上万的应用程序需要维护和不使用ARC。将字符串包装在自动发行版中。我认为这应该是可行的,但我没有测试。
https://stackoverflow.com/questions/24417231
复制相似问题