[NSString alloc] 可能发生内存泄漏
Possible Memory Leak with [NSString alloc]
我为 cross-platform 应用程序编写插件。我的代码几乎完全依赖于应用程序的 API 来与外界交互,这意味着我对 OS-level API 的体验是有限的。但我确实有少量 OS-specific 代码来实现应用程序 API 未提供的目标。在 Mac 方面,我有许多代码片段,例如更改 Window:
标题的代码片段
首先是效用函数:
NSString *GetNSStringFromUTF16 ( const utf16char * const str )
{
size_t len = 0;
while ( str[len] )
len++;
NSData* data = [[NSData alloc] initWithBytes:str length:sizeof(*str)*len];
NSString* retVal = [[NSString alloc] initWithData:data encoding:NSUTF16LittleEndianStringEncoding];
[data release];
return retVal;
}
然后我设置 window 标题是这样的:
[myWind setTitle:GetNSStringFromUTF16(newTitleStr)];
我进行了 运行 XCode 分析,它标记了一些调用我的 GetNSStringFromUTF16
函数的“可能的内存泄漏”。但它没有标记这个。是不是内存泄漏?
别想了。只需遵循黄金法则:如果您说 alloc
、copy
或 retain
,则必须说 release
。你说alloc
?是的!那么你必须说release
。在 return 之前,您需要 autorelease
您的 retVal
。
其他说明:方法名不要以大写字母开头。并且不要以 get
开头您的函数名称!这会影响分析器对内存管理的期望。
最后一条评论:如果可能的话,使用 ARC 而不是手动内存管理。
我为 cross-platform 应用程序编写插件。我的代码几乎完全依赖于应用程序的 API 来与外界交互,这意味着我对 OS-level API 的体验是有限的。但我确实有少量 OS-specific 代码来实现应用程序 API 未提供的目标。在 Mac 方面,我有许多代码片段,例如更改 Window:
标题的代码片段首先是效用函数:
NSString *GetNSStringFromUTF16 ( const utf16char * const str )
{
size_t len = 0;
while ( str[len] )
len++;
NSData* data = [[NSData alloc] initWithBytes:str length:sizeof(*str)*len];
NSString* retVal = [[NSString alloc] initWithData:data encoding:NSUTF16LittleEndianStringEncoding];
[data release];
return retVal;
}
然后我设置 window 标题是这样的:
[myWind setTitle:GetNSStringFromUTF16(newTitleStr)];
我进行了 运行 XCode 分析,它标记了一些调用我的 GetNSStringFromUTF16
函数的“可能的内存泄漏”。但它没有标记这个。是不是内存泄漏?
别想了。只需遵循黄金法则:如果您说 alloc
、copy
或 retain
,则必须说 release
。你说alloc
?是的!那么你必须说release
。在 return 之前,您需要 autorelease
您的 retVal
。
其他说明:方法名不要以大写字母开头。并且不要以 get
开头您的函数名称!这会影响分析器对内存管理的期望。
最后一条评论:如果可能的话,使用 ARC 而不是手动内存管理。