【问题标题】:Memory leaks in using perform selector使用执行选择器时的内存泄漏
【发布时间】:2012-08-21 11:35:56
【问题描述】:
-(void)walkDOM:(SEL)visitor node:(QuadNode*)node {
    [self performSelector:visitor withObject:node]; /* ------>100% leaks shown here */
    NSArray* children = node.children;
    if (children) {
        for (QuadNode* child in children) {
            [self walkDOM:visitor node:child];
        }
    }
}

我不知道上面有什么问题它崩溃了。任何帮助建议!!!!!

编辑:

-(void)registerFramesetterVisitor:(TDOMNode*)node {
     [strMaker reset]; 
     [node registerFramesetter:self]; 
}

【问题讨论】:

  • 您需要向我们展示visitor 描述的方法。
  • -(void)registerFramesetterVisitor:(TDOMNode*)node { [strMaker reset]; [节点 registerFramesetter:self];在上面的代码中,我的选择器是 registerFramesetterVisitor
  • [NSObject performSelector:withObject:] 在哪里定义?我找不到它...
  • @trojanfoe:在 NSObject 协议参考中定义:link

标签: objective-c memory memory-leaks performselector


【解决方案1】:

这只是编译器警告的问题,您可以使用以下方法抑制它们:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
    [self performSelector:visitor withObject:node];
#pragma clang diagnostic pop

Source

【讨论】:

  • 鉴于 OP 使用了“此处显示 100% 泄漏”的短语,这意味着他正在使用 Instruments 看到这些泄漏;如您所知,这已经过编译...
  • 查看这些泄漏的另一种方法是使用构建和分析。这样,编译器会抱怨我几周前遇到的 performSelector。
  • 但是Analyze 没有使用“100% 泄漏...”这个词。 Instruments 可以。
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多