2016-01-07 2 views
0

Я создал объект NSInvocationOperationQueue, а затем добавил его в мой экземпляр NSOperationQueue.NSInvocationOperation object release

operationQueue = [NSOperationQueue new]; 

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(counterTask) object:nil]; 

[operationQueue addOperation:operation]; 

operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(colorRotatorTask) object:nil]; 
[operationQueue addOperation:operation]; 

Работает, но у меня есть вопросы. Этот post говорит мне, что каждая операция должна быть выпущена, но моя без релиза все еще работает, и это дает мне ошибку, если я ее выпущу. Если я не выпущу, есть ли побочный эффект или что-то случится? Или есть какие-то шаги, которые я пропустил, и это не может быть выпущено?

Любая помощь будет оценена по достоинству. Спасибо.

ответ

0

Обратите внимание, что проект, созданный в указанной вами ссылке, не использует автоматический подсчет ссылок (ARC).

Нет причин не использовать ARC в любом новом проекте. С помощью ARC вы можете избежать всех попыток вызвать release или autorelease или retain. ARC будет правильно освобождать добавленную операцию, когда это будет сделано.

Код, который вы опубликовали в своем вопросе, подходит для управления памятью, если вы используете ARC. И поскольку вы получаете ошибки, пытающиеся вызвать release, это означает, что вы используете ARC.

+0

На данный момент (xcode 7 и выше), весь проект, который был создан, поддерживает ARC? Поэтому я мог игнорировать проблему управления памятью ('release',' autorelease' или 'keep') или я должен обратить на это внимание? – yankoo

+0

ARC поддерживается для последних версий Xcode. Но да, как я сказал в своем ответе, вы используете ARC, чтобы игнорировать (на самом деле вы должны игнорировать) любые вызовы 'release' и т. Д. – rmaddy

+0

Большое вам спасибо @rmaddy. Вы сделали мой день! – yankoo