提问人:Morniak 提问时间:4/25/2014 更新时间:4/25/2014 访问量:587
物镜C中的动态缓冲器(带ARC)
Dynamic buffer in objective C (with ARC)
问:
我正在尝试使用对象的方法,但我的第一个参数有问题。
此 NSString 中的字符数不是固定的,因此我需要动态分配缓冲区(缓冲区的大小必须类似于 )。- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange
NSString
[my_string length] * sizeof(UniChar)
我是目标 C 的新手,不知道该怎么做。
我可以像在 C 程序中一样使用(ARC 已启用)吗?malloc
答:
3赞
Martin R
4/25/2014
#1
是的,您可以使用适当大小的缓冲区。你必须缓冲
当它不再使用时,因为 ARC 不管理 ed 内存。malloc()
free()
malloc
或者,使用 UTF-16 编码创建一个对象:NSData
NSString *string = @"H€llö Wörld";
NSData *data = [string dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
const unichar *charsPtr = [data bytes];
charsPtr
只要存在,即只要你保持对它的强烈引用,它就有效。data
评论
0赞
Morniak
4/26/2014
谢谢你的回答。出于好奇,是第二个解决方案比第一个更好,还是两个解决方案相等?
0赞
Martin R
4/26/2014
@Morniak:我认为这只是一个品味问题。在第二种解决方案中,开销很小,因为它创建了一个对象。但我喜欢它,因为您不必提前计算缓冲区大小。
上一个:在 swift 中转换为可选值
评论