2013-10-02 2 views
0

enter image description hereРан Analyzer: Потенциальная утечка памяти

Привет,

Я побежал анализатор 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); 

} 

Спасибо за вашу помощь.


анализатор Информация о Вот подробнее об ошибке о том, чтобы немного изменений.

enter image description here

+1

вам нужно прочитать информацию об управлении памятью и свойствах объекта Objective-C. Короче говоря, вы не можете использовать 'assign' для свойства класса и ожидать, что это сработает. – dandan78

+0

Свойство с назначением не должно быть выделено, вместо него назначено значение => midiDevices = otherArray. Используйте keep/strong. –

ответ

1

Предполагая, что вы используете ARC, этот объект фактически будет выпущен и dealloc'd мгновенно. Почему это говорит о том, что утечка памяти запутана, но у вас будет мертвая ссылка. Использовать strong, а не assign.

+0

Я не использую ARC .. этот проект должен быть не ARC. Я попробую его. – lppier

+0

OK, затем используйте 'keep' и' self.midiDevices = [NSMutableArray array]; ' –

+0

Я установил его сохранить, неатомично и сделать self.midiDevices = [NSMutableArray array]; я все еще получаю предупреждение о потенциальной утечке в синем – lppier

Смежные вопросы