Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c [NSString alloc]可能存在内存泄漏_Objective C_Cocoa - Fatal编程技术网

Objective c [NSString alloc]可能存在内存泄漏

Objective c [NSString alloc]可能存在内存泄漏,objective-c,cocoa,Objective C,Cocoa,我为跨平台应用程序编写插件。我的代码几乎完全依赖于应用程序的API与外部世界进行交互,这意味着我使用操作系统级API的经验是有限的。但我确实有少量特定于操作系统的代码来实现应用程序API未提供的目标。在Mac端,我有许多类似这样的代码片段,可以更改窗口的标题: 首先是效用函数: NSString*getnsstringfromfromutf16(const utf16char*const str) { 尺寸长度=0; while(str[len]) len++; NSData*data=[[NS

我为跨平台应用程序编写插件。我的代码几乎完全依赖于应用程序的API与外部世界进行交互,这意味着我使用操作系统级API的经验是有限的。但我确实有少量特定于操作系统的代码来实现应用程序API未提供的目标。在Mac端,我有许多类似这样的代码片段,可以更改窗口的标题:

首先是效用函数:

NSString*getnsstringfromfromutf16(const utf16char*const str)
{
尺寸长度=0;
while(str[len])
len++;
NSData*data=[[NSData alloc]initWithBytes:str长度:sizeof(*str)*len];
NSString*retVal=[[NSString alloc]initWithData:数据编码:NSUTF16LittleEndianStringCodeing];
[数据发布];
返回返回;
}
然后,我将窗口标题设置为:

[myWind设置标题:GetNSStringFromUTF16(NewTitleST)];

我正在运行XCode Analyze,它标记了对我的
GetNSStringFromUTF16
函数调用的大量“可能内存泄漏”。但它没有标记这一个。是不是内存泄漏?

别想。只要遵循黄金法则:如果你说
alloc
copy
,或者
retain
,你必须说
release
。你说的是alloc吗?对然后你必须说
release
。在返回之前,您需要
autorelease
您的
retVal

其他注释:不要以大写字母开头方法名称。并且不要以
get
开头函数名!这会影响分析器对内存管理的期望


最后一点意见:如果可能的话,使用ARC代替手动内存管理。

别想了。只要遵循黄金法则:如果你说
alloc
copy
,或者
retain
,你必须说
release
。你说的是alloc吗?对然后你必须说
release
。在返回之前,您需要
autorelease
您的
retVal

其他注释:不要以大写字母开头方法名称。并且不要以
get
开头函数名!这会影响分析器对内存管理的期望


最后一点意见:如果可能,请使用ARC而不是手动内存管理。

GetNSStringFromUTF16()
是一个C函数,而不是一个方法。。。。或者
new
或者
mutableCopy
。@Rob是的,在我的黄金法则(ARC法则,获取它?对于Alloc,Retain,Copy)
Alloc
包括
new
,因为它只是
Alloc init
Copy
包括
mutableCopy
。他可以用
[[NSString Alloc]简化initWithBytes:length:encoding::
GetNSStringFromUTF16()是一个C函数,不是一个方法。。。。或者
new
或者
mutableCopy
。@Rob是的,在我的黄金法则(ARC法则,获取它?对于Alloc,Retain,Copy)
Alloc
包括
new
,因为它只是
Alloc init
Copy
包括
mutableCopy
。他可以用
[[NSString Alloc]简化initWithBytes:length:encoding://code>使用静态分析器(shift+命令+B或“产品”-“分析”)。它非常擅长识别这些困扰手动引用计数代码的错误。FWIW,苹果的手册中概述了手动引用代码中关于何时发布的规则。使用静态分析器(shift+命令+B或“产品”-“分析”)。它非常擅长识别这些困扰手动引用计数代码的错误。FWIW,苹果的。