Проблема управления памятью в Pubnub - PullRequest
0 голосов
/ 30 июля 2011

Я использую внешнюю библиотеку в своем приложении (в частности, https://github.com/jazzychad/CEPubnub) и сталкиваюсь с проблемой управления памятью. После инициализации объекта "CEPubnub" необходимо подписаться на канал для получения обновлений. В итоге я написал следующий код:

self.pubnub = [[[CEPubnub alloc] 
          publishKey:@"..." 
          subscribeKey:@"..." 
          secretKey:@"..." 
          sslOn:NO 
          origin:@"pubsub.pubnub.com"] autorelease];
//Set the channel for this holler
[self setPubnubChannel:[[[NSMutableString alloc] initWithString:@"channelprefix_"] autorelease]];
[pubnubChannel appendString:[event eventId]];
NSLog(@"Subscribing to the pubnubChannel: %@", (NSString *)[[pubnubChannel copy] autorelease]);

Всякий раз, когда я в конечном итоге запускаю это приложение и загружаю представление, в котором оно вызывается, закрываю представление, загружаю его снова, я в конечном итоге заканчиваю тем, что вызываю утечку памяти, и вторая строка кода там выделяется как источник проблема (через мой инструмент утечки).

Когда я запускаю Analyze, он также выделяет вторую строку кода, но говорит о «потенциальной утечке объекта, размещенного в [строка 1]», как будто проблема в первой строке. В моих методах viewDidUnload и методе dealloc я освобождаю свойство pubnub, но оно все еще кажется утечкой, и я ошеломлен. Любые идеи о том, что я должен делать?

Ответы [ 2 ]

2 голосов
/ 30 июля 2011

Я узнал это здесь: инструменты только показывают вам, где создан объект, который протекает.Следуйте этому на протяжении всего вашего кода, вы должны снова сохранить один из этих объектов в другом месте без другого соответствующего выпуска.

Если pubnub - это свойство, вы обходите установщик, ссылаясь на переменную экземпляра pubnub.Если это так, измените его на self.pubnub и добавьте авто-релиз.это должно решить это.

self.pubnub = [[[CEPubnub alloc] 
      publishKey:@"..." 
      subscribeKey:@"..." 
      secretKey:@"..." 
      sslOn:NO 
      origin:@"pubsub.pubnub.com"] autorelease];
0 голосов
/ 30 апреля 2012

CEPUBNUB с дугой

http://dashasalo.com/tag/pubnub/

Скачать напрямую: http://dashasalo.com/wp-content/uploads/cepubnub/CEPubnub_ARC.zip

Если вы изо всех сил пытаетесь заставить CEPubnub работать с ARC, то ниже показано, как я решил это для себя.

  1. Удалите все упоминания о выпуске и авто-выпуске из всех файлов CEPubnub. Мне пришлось удалить немало, но это было очень просто.

  2. Следующий шаг - переименовать все методы, которые вызывают init для объекта self, чтобы начать с «init». Будет пара в CEPubnub.h /.m и CEPubnubRequest.h /.m. Не забудьте найти, где эти методы вызываются, и соответственно обновить имена методов. Например, измените следующее:

  3. Если вы затем запустите Analyzer, он скажет, что в методе urlencode есть потенциальная утечка памяти. Мне пришлось присвоить результат CFURLCreateStringByAddingPercentEscapes новому объекту NSString, чтобы избавиться от предупреждения.

...