Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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
Ios 目标C无法释放内存_Ios_Objective C_Memory Leaks - Fatal编程技术网

Ios 目标C无法释放内存

Ios 目标C无法释放内存,ios,objective-c,memory-leaks,Ios,Objective C,Memory Leaks,根据泄漏工具,以下代码导致内存泄漏: - (NSString *)emojiWithCode:(int)code { int sym = EMOJI_CODE_TO_SYMBOL(code); __block __weak NSString *result = [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding]; return result;

根据泄漏工具,以下代码导致内存泄漏:

- (NSString *)emojiWithCode:(int)code {
    int sym = EMOJI_CODE_TO_SYMBOL(code);
    __block __weak NSString *result = [[NSString alloc] initWithBytes:&sym length:sizeof(sym) encoding:NSUTF8StringEncoding];
    return result;
}
我试图用free(&sym)释放sym,但当时出现了以下错误:

malloc: *** error for object 0x27d2e60c: pointer being freed was not allocated *** set a breakpoint in malloc_error_break to debug
如果未分配,这是如何导致泄漏的?
如何正确释放此内存并解决此问题
表情符号是什么

#define EMOJI_CODE_TO_SYMBOL(x) ((((0x808080F0 | (x & 0x3F000) >> 4) | (x & 0xFC0) << 10) | (x & 0x1C0000) << 18) | (x & 0x3F) << 24);

#define EMOJI_code_TO_SYMBOL(x)(((0x8080F0 |)(x&0x3F000)>>4)|(x&0xFC0)仪器无法知道此对象泄漏的原因,因此它只显示泄漏对象最初分配的代码行。这行代码(一旦删除
u块
u
)很好,所以你必须进一步挖掘,找出这个物体泄漏的原因

总之,您不必对这一行代码做任何事情,而是需要找出该字符串随后在何处被使用,以确定其泄漏的原因。最有可能的是,使用该字符串的对象本身泄漏(例如,强引用循环或类似于保留泄漏对象的重复计时器的东西).因为那个对象泄漏了,所以这个字符串也泄漏了。所以,把你的分析提高一个层次,看看这个字符串是在哪里使用的,找出它为什么没有被释放

我建议您查看WWDC 2012视频,了解如何使用仪器指导您的研究,以确定泄漏的最终来源


另外,做静态分析通常是值得的(在Xcode“产品”菜单上选择“分析”),在某些情况下,它可以识别问题的来源。在进入仪器之前,确保静态分析器为您提供一份干净的健康清单。这在非ARC代码中固然更有用,但有时它可以识别问题。

为什么要使用_block?以及您的内存到底泄漏到了什么对象?sym,还是结果st戒指?什么是表情符号代码?我打赌这些符号来自一个静态数组anyways@BHendricks如果不将_块与_弱一起使用,则会导致警告(弱属性不能与自动变量一起使用).这就是我使用它的原因。移除块和弱-请发布泄漏工具的屏幕截图,以便我们可以看到泄漏的内容…另外:当然,工具可以拾取arc内容-但它稍后会消失