Ios 目标C中的动态缓冲区(带弧)

Ios 目标C中的动态缓冲区(带弧),ios,objective-c,memory-management,automatic-ref-counting,buffer,Ios,Objective C,Memory Management,Automatic Ref Counting,Buffer,我试图使用NSString对象的-(void)getCharacters:(unichar*)缓冲区范围:(NSRange)aRange方法,但第一个参数有问题。 此NSString中的字符数不是固定的,因此我需要动态分配缓冲区(缓冲区的大小必须类似于[my_string length]*sizeof(UniChar)) 我是C目标的新手,不知道怎么做。 我可以像在C程序中一样使用malloc(ARC已启用)吗?是的,您可以malloc()适当大小的缓冲区。您必须释放()缓冲区 不再使用时,因为

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

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

是的,您可以
malloc()
适当大小的缓冲区。您必须
释放()
缓冲区 不再使用时,因为ARC不管理
malloc
ed内存

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

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

charsPtr
只要
数据
存在,也就是说,只要您保持对它的有力引用,它就有效。

谢谢您的回答。出于好奇,第二种解决方案比第一种好,还是两种解决方案相等?@Morniak:我认为这只是一个品味问题。第二种解决方案的开销很小,因为它创建了一个对象。但我喜欢它,因为您不必提前计算缓冲区大小。