Я недавно получил «назначен» на кусок кода, где следующий был отмечен с #warning memory leak
Создайте блок и назовите его как входной блок?
- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
completedBlock = ^(Class1 *obj, NSError *error) {
/* Do stuff */
#warning memory leak
if (completedBlock) {
completedBlock(obj, error);
}
};
[self callAnotherMethodWithCallback::completedBlock];
}
Я не уверен, что с ним делать, это выглядит странно, чтобы создать блок с именем входной блок, но он работает. Почему приведенный выше код опасен?
Редактировать ARC включен.
Изменен код для этого, и это, кажется, не просачиваться больше:
- (void)aMethodWithCallback:(BlockType)completedBlock {
/* Do stuff */
BlockType completedBlock2 = ^(Class1 *obj, NSError *error) {
/* Do stuff */
if (completedBlock) {
completedBlock(obj, error);
}
};
[self callAnotherMethodWithCallback::completedBlock2];
}
На самом деле есть утечка? –
@ 0x7fffffff Да, есть. Это незначительно, но утечка тем не менее. – MdaG
@ 0x7fffffff Нет, утечки нет. Я думаю, что весь вопрос здесь фиктивный. ARC полностью заботится об этой «утечке». –