【发布时间】:2011-10-12 12:56:58
【问题描述】:
我用的是Objective-C,不知道用ARC编译器编译代码时如何创建和调用无参数的方法。
这是我试图在非 ARC Objective-C 中完成的事情(无论如何这可能是错误的)。
//
// Dummy.m
// OutParamTest
#import "Dummy.h"
@implementation Dummy
- (void) foo {
NSString* a = nil;
[self barOutString:&a];
NSLog(@"%@", a);
}
- (void) barOutString:(NSString **)myString {
NSString* foo = [[NSString alloc] initWithString:@"hello"];
*myString = foo;
}
@end
我在这里阅读了文档: https://clang.llvm.org/docs/AutomaticReferenceCounting.html
...但是我发现很难得到任何可以编译的东西,更不用说任何正确的东西了。任何人都能够以适合 ARC Objective-C 的方式重写上述代码的 jist 吗?
【问题讨论】:
-
您的问题到底是什么?你得到什么编译器错误?
-
我已根据您的建议更新了上面的代码示例,并包含了一组编译器错误。谢谢。
-
查看我的更新答案。正如编译器所说,你不能使用这样的间接指针,而是必须直接传入
&a。 -
感谢@MikeWeller 的帮助,上面的代码现在可以编译了——技术上正确吗?
-
您不需要
b变量,只需传入&a作为参数。您也不需要在a和b变量上使用__autoreleasing,除非您需要访问不常见的barOutString:中的初始值。
标签: ios automatic-ref-counting autorelease