【问题标题】:Dynamic buffer in objective C (with ARC)目标 C 中的动态缓冲区(使用 ARC)
【发布时间】:2014-04-25 15:48:25
【问题描述】:

我正在尝试使用 NSString 对象的 - (void)getCharacters:(unichar *)buffer range:(NSRange)aRange 方法,但第一个参数有问题。 这个 NSString 中的字符数不是固定的,所以我需要动态分配我的缓冲区(缓冲区的大小必须类似于[my_string length] * sizeof(UniChar))。

我是目标 C 的新手,不知道该怎么做。 我可以像在 C 程序中一样使用malloc(ARC is enabled) 吗?

【问题讨论】:

    标签: ios objective-c memory-management automatic-ref-counting buffer


    【解决方案1】:

    是的,您可以malloc() 一个适当大小的缓冲区。你必须free()缓冲区 当它不再使用时,因为 ARC 不管理malloced 内存。

    或者,使用 UTF-16 编码创建一个 NSData 对象:

    NSString *string = @"H€llö Wörld";
    NSData *data = [string dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
    const unichar *charsPtr = [data bytes];
    

    只要data 存在,charsPtr 就有效,即只要您保持对它的强引用。

    【讨论】:

    • 感谢您的回答。出于好奇,第二个解决方案比第一个解决方案更好,还是两个解决方案相等?
    • @Morniak:我认为这只是个人喜好问题。第二种解决方案的开销很小,因为它创建了一个对象。但我喜欢它,因为您不必提前计算缓冲区大小。
    猜你喜欢
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多