我为跨平台应用程序编写插件。我的代码几乎完全依赖于应用程序的API与外部世界进行交互,这意味着我在操作系统级API方面的经验有限。但我确实有少量特定于操作系统的代码来实现应用程序的API没有提供的目标。在Mac端,我有很多类似这样的代码片段,它们改变了窗口的标题:
首先是一个实用函数:
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;
}
然后,稍后我将窗口标题设置为:
[myWind setTitle:GetNSStringFromUTF16(newTitleStr)];
我正在运行XCode Analyze;可能的存储器泄漏";从对我的CCD_ 1函数的调用。但它并没有标记这个。这是不是内存泄漏?
不要思考。只要遵循黄金法则:如果你说alloc
、copy
或retain
,你就必须说release
。你说的是alloc
吗?对那么你必须说release
。您需要先autorelease
您的retVal
,然后才能退货。
其他注释:方法名称不要以大写字母开头。并且不要以GetNSStringFromUTF16
0作为函数名称的开头!这会影响分析器对内存管理的预期
最后一条评论:如果可能的话,使用ARC而不是手动内存管理。