Использование NSAutoReleasePool в NSOperation для вторичного потока в методах начала и конца): происходит сбой - PullRequest
2 голосов
/ 28 февраля 2012

У меня есть операция NSO, которую я хотел заключить с NSAutoreleasePool, например:

- (void) start {

    opPool = [[NSAutoreleasePool alloc] init];

    if (self.isCancelled) {
        [self finish];
    }
    ''' more code ...   
}

и

- (void) finish {

    [opPool release];

    [[NSNotificationCenter defaultCenter] removeObserver:self name:NSManagedObjectContextDidSaveNotification object:nil];
    ... more finish code here ...
    self.state = LSOperationStateFinished;
}

opPool - это iVar.

операция работает без выделения и освобождения NSAutoreleasePool.Но происходит сбой при реализации, как показано.

Я поставил точку останова в обоих методах, чтобы посмотреть, каково описание [NSThread currentThread].То же самое в обоих методах.

Насколько я понимаю из документации по пулам автоматического освобождения, я должен установить один для фоновых потоков, который отделен от основного потока.Вот как я хотел это сделать, но, видимо, это не правильный путь?

Я делаю что-то в корне неправильно?Что я должен сделать, чтобы удовлетворить задокументированное требование?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2012

Вы можете вставить свой собственный NSAutoreleasePool в основной поток, это нормально.

ЗДЕСЬ - это поток об этом.

Я думаю, что основная причина, которая вызвалатвоя авария [opPool release];.Вы пробовали [opPool drain]; вместо [opPool release];?


РЕДАКТИРОВАТЬ:

Кажется, вы объявили opPool как iVar, поэтому вы выпустили его в dealloc?Если это так, вы получили два release и в результате разбились.

Может быть, вы можете попробовать что-то вроде:

...
NSAutoreleasePool * opPool = [[NSAutoreleasePool alloc] init];

[self start];
[self finish];

[opPool drain];
...
0 голосов
/ 28 февраля 2012

Если у вас произошел сбой, опубликуйте обратную трассировку.

Как таковой, информации недостаточно, чтобы сказать что-то конкретное.

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

...