【发布时间】:2014-06-06 11:40:39
【问题描述】:
这主要是一个“学术”问题,所以请不要问“为什么需要这样做”:-)
我有这个客观的 c 方法,我没有使用 ARC(我知道如果我不释放分配的字符串,它会泄漏)。 该方法接受一个指向内存中某物的指针,然后将指向的内容更改为 NSMutableString。
+(void) writeString:(void **)var
{
NSMutableString *aString = [[NSMutableString alloc] initWithFormat:@"pippo %@", @"pluto"];
*var = aString;
}
从Objective C我以这种方式访问它并且它工作正常
NSString *str;
[FLSwiftUtils writeString:&str];
NSLog(@"%@", str); // prints pippo pluto
现在我想以同样的方式从 Swift 中访问它,但是我遇到了指针问题。 我试过这样:
var opaque = COpaquePointer.null() // create a new opaque pointer pointing to null
FLSwiftUtils.writeString(&opaque)
println(opaque)
但它会打印 VSs14COpaquePointer(有 1 个孩子),因为 opaque 是一个指针,我不明白如何尊重它并访问指向的 NSMutableString
如果我尝试从不透明值开始创建一个 UnsafePointer:
var str = UnsafePointer<NSMutableString>(opaque)
println(str)
println 打印一个空行
我什至试过这个:
var secondStr = AutoreleasingUnsafePointer<NSMutableString>(opaque.value)
println(secondStr)
println(secondStr.memory)
但它会打印出来
VSs26AutoreleasingUnsafePointer(有 1 个孩子) __NSCFString
我想我已经接近解决方案了,但肯定我做错了什么。
【问题讨论】:
-
这可能对你有用:ericasadun.com/2014/06/04/…
-
它没有帮助...我使用的是 void**,而不是 void* :-/
标签: objective-c swift