я должен выполнить селектор по названию по классу (не экземпляр) и использовать ее возвращаемое значение:"performSelector может вызвать утечку" альтернативу, когда он протекает?
id obj = [objClass performSelector:NSSelectorFromString(methodName) withObject:p1];
Селектор создает новый экземпляр класса. Мне нужно использовать возвращаемый экземпляр. Очевидно, что я получаю обычный performSelector может вызвать утечку, потому что его селектор неизвестен предупреждение, поскольку этот проект скомпилирован с ARC.
Если я правильно (from the answers here и другие), в данном случае performSelector будет вызвать утечку (поправьте меня, если я ошибаюсь, то я мог бы просто отключить предупреждение и сделать с ней) понять. Селекторы реализованы следующим образом:
+ (id) objectWithFile:(NSString*)p1
{
return [NSKeyedUnarchiver unarchiveObjectWithFile:p1];
}
Каковы мои варианты, когда я должен использовать селектор из строки и селектор создает и возвращает новый экземпляр объекта?
Я считал NSInvocation, но его метод getReturnValue
требует, чтобы я предоставил свой собственный выделенный буфер, в котором хранится возвращаемое значение. Я не уверен, что это даже работает с методами ARC и класса, или мне просто нужно, чтобы __bridge_transfer
отбрасывал буфер возвращаемого значения malloc'ed до id
, и это все, что ему нужно.
Я еще не понимаю, почему у вас будет утечка в вашем случае. 'objectWithFile:' возвращает объект с автореализацией, потому что это не метод alloc/copy/new. –
Я не уверен, что понимаю это правильно. Скажем, я возвращаю [Object new] вместо unarchived объекта, который тоже возвращает объект автообновления, но затем течет? Или произойдет ли утечка ** только **, если выполняемый селектор сам вызовет alloc, новый или скопированный? – LearnCocos2D