Когда выпустить/сохранить объект, который передается вторичному Потоку?

Я передаю объект вторичному потоку с помощью следующего кода:

 (void)login:(id)sender
{
  platformMsgs_LoginRequest *loginRequest = [[[platformMsgs_LoginRequest alloc] init] autorelease];
//more code...
 [NSThread detachNewThreadSelector:@selector(sendLoginRequest:) toTarget:self withObject:loginRequest];
//more code...
}

- (void)sendLoginRequest:(platformMsgs_LoginRequest *)loginRequest
 {
 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 [loginRequest retain];
 NetSuiteBinding *binding = [NetSuiteServiceSvc NetSuiteBinding];
 NetSuiteBindingResponse *response = [binding loginUsingParameters:loginRequest      applicationInfo:nil partnerInfo:nil];
 [self performSelectorOnMainThread:@selector(loginOperationCompleted:)   withObject:response waitUntilDone:NO];
 [loginRequest release];
 [pool drain];
 }

Мой вопрос, действительно ли автовыпуск является правильным способом обработать выпуск этого объекта?. После того как это передается вторичному потоку, я сохраняю его и выпускаю его, когда мне больше не нужен он.

Однако действительно ли возможно, что автовыпуск, выпускает объект, прежде чем вторичный поток будет иметь шанс сохранить его?. Я должен создать ivar для этого?, так, чтобы я мог выпустить объект в performSelectorOnMainThread?. Мне больше не нужен объект после входа в систему, таким образом, ivar не походит на правильный способ пойти. Что лучший способ состоит в том, чтобы обработать это?.Спасибо.

- Оскар

5
задан Oscar Gomez 9 February 2010 в 23:18
поделиться

2 ответа

Действительно ли необходимо, чтобы ваш контроллер корневого представления знал об изменениях или только о подчиненных представлениях?

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

-121--1853362-

итер возвращает итератор для s.

[iter (s)] * n составляет список, в n раз превышающий один и тот же итератор для s.

Поэтому при выполнении застежек -молний (* [iter (s)] * n) извлекает предмет из всех трех итераторов из списка по порядку. Поскольку все итераторы являются одним и тем же объектом, он просто группирует список в фрагменты n .

-121--768642-

Документация для detachNewThreadSelector: toTarget: wityObject: отвечает на ваш вопрос:

Объекты aTarget и anArgument сохраняются во время выполнения отсоединенного потока, а затем освобождаются.

Таким образом, да, можно автоматически освободить объект или освободить его явно после вызова disachNewThreadSelector. И не нужно сохранять объект во вторичном потоке.

5
ответ дан 14 December 2019 в 13:35
поделиться

Из документации.

detachNewThreadSelector:toTarget:withObject:

Объекты aTarget и anArgument сохраняются во время выполнения отсоединенного потока, а затем освобождаются. отделенный поток завершается (с помощью метод класса exit), как только aTarget завершит выполнение метода aSelector метод.

Так что вам не нужно так стараться. Автоосвобождение здесь в порядке, и вам не нужно сохранять его в потоке, поскольку поток сам сохраняет аргумент и цель, и освободит его, когда закончит.

1
ответ дан 14 December 2019 в 13:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: