【问题标题】:Ran Analyzer : Potential Memory LeakRan Analyzer:潜在的内存泄漏
【发布时间】:2013-10-02 07:45:19
【问题描述】:

你好,

我运行了 XCode 分析器 - 它告诉我以下两者都是潜在的内存泄漏。 我不确定为什么。 我这样声明了 midiDevices

@property (assign, nonatomic) NSMutableArray* midiDevices;

这是 openMidiIn 的代码

-(void)openMidiIn {
    int k, endpoints;

    CFStringRef name = NULL, cname = NULL, pname = NULL;
    CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
    MIDIPortRef mport = NULL;
    MIDIEndpointRef endpoint;
    OSStatus ret;

    /* MIDI client */
    cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
    ret = MIDIClientCreate(cname, NULL, NULL, &mclient);
    if(!ret){
        /* MIDI output port */
        pname = CFStringCreateWithCString(NULL, "outport", defaultEncoding);
        ret = MIDIInputPortCreate(mclient, pname, MidiWidgetsManagerReadProc, self, &mport);
        if(!ret){
            /* sources, we connect to all available input sources */
            endpoints = MIDIGetNumberOfSources();
            //NSLog(@"midi srcs %d\n", endpoints);
            for(k=0; k < endpoints; k++){
                endpoint = MIDIGetSource(k);
                void *srcRefCon = endpoint;
                MIDIPortConnectSource(mport, endpoint, srcRefCon);

            }
        }
    }
    if(name) CFRelease(name);
    if(pname) CFRelease(pname);
    if(cname) CFRelease(cname);

}

感谢您的帮助。


分析仪信息 这是有关进行一些更改的错误的更多信息。

【问题讨论】:

  • 你需要阅读 Objective-C 中的内存管理和属性。简而言之,您不能将 assign 用于类类型属性并期望它能够工作。
  • 不应分配带有 assign 的属性,而是为其分配一个值 => midiDevices = otherArray.使用保留/强。

标签: ios memory memory-leaks


【解决方案1】:

假设您使用的是 ARC,该对象实际上会立即被释放并释放。为什么说你有内存泄漏令人困惑,但你会有一个死引用。使用strong,而不是assign

【讨论】:

  • 我没有使用 ARC。这个项目必须是非 ARC。我会试试看。
  • 好的,然后使用retainself.midiDevices = [NSMutableArray array];
  • 我将它设置为保留,非原子并做了 self.midiDevices = [NSMutableArray array];我仍然收到蓝色的潜在泄漏警告。
  • 向我们展示openMidiIn 的代码 - 问题可能就在那里。
  • 难不成是想让你释放mport?我只是在这里猜测,我从来没有玩过 MIDI 代码。分析仪实际上应该具体告诉您泄漏可能发生的原因和方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多