物镜C中的动态缓冲器(带ARC)

Dynamic buffer in objective C (with ARC)

提问人:Morniak 提问时间:4/25/2014 更新时间:4/25/2014 访问量:587

问:

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

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

ios objective-c 内存管理 自动引用计数 缓冲区

评论


答:

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:我认为这只是一个品味问题。在第二种解决方案中,开销很小,因为它创建了一个对象。但我喜欢它,因为您不必提前计算缓冲区大小。