gpt4 book ai didi

cocoa - NSString stringWithCString : length: retain the byte array I pass in? 是否

转载 作者:行者123 更新时间:2023-12-03 16:34:36 24 4
gpt4 key购买 nike

我正在使用 AsyncSocket,其中 AsyncSocket 对象每当从远程端接收数据时都会调用下面的委托(delegate)方法:

- (void)onSocket:(AsyncSocket*)socket didReadData:(NSData*)data withTag:(long)tag;

现在,在这个方法中,我将 NSData 对象传递到以下命令中,以获取所接收数据的 NSString 表示形式:

NSString *body = [NSString stringWithCString:[data bytes] length:[data length];

NSString stringWithCString: length: 是否保留我传入的字节数组?我需要保留 NSData *data 吗?我需要在最后释放 NSString *body 吗?

谢谢。我想根据委托(delegate)方法获得正确的内存管理...

最佳答案

Does NSString stringWithCString: length: retain the byte array I pass in?

不可能保留字节数组。只能保留对象。

Do I need to retain the NSData *data?

没有。因为字符串无法保留数据(它不知道)或其内容,所以字符串将复制字节。 (想想如果你实现这个方法你会做什么:就是这样。)

让我们改变一下情况,看看如果您传入数据对象而不是字节,您会做什么。

如果字符串确实保留了数据,那么您无需担心数据会从字符串下方消失,因为字符串正在保留数据。如果它不保留它,则该字符串要么制作了自己的副本,要么根本不保存您的数据。

所以其他对象的保留并不重要。别担心他们。只关心谁拥有什么,并相应地保留或不保留。

Do I need to be releasing NSString *body at the end?

好吧,你没有保留它,你没有分配它,你也没有复制它。因此,您不拥有它。所以,不。

如果您确实想获得该对象的所有权,您可以保留它或制作(然后拥有)自己的副本。然后你就释放它。

关于cocoa - NSString stringWithCString : length: retain the byte array I pass in? 是否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/938408/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com