Эй, я уже некоторое время сражаюсь с этой проблемой. Возможно, что-то мне не хватает в знаниях о многопоточности, но вот что происходит. Когда я создаю очередь nsoperation, любые выделенные переменные очищаются после «[request startSynchronous];» строка кода. Вот то, что я говорю о:ASIHTTPRequest поглощает мои переменные NSOperation в синхронном режиме
@implementation imageLoadOperation
@synthesize object;
-(id)initWithObject:(NSMutableArray *)receivedObject
{
...
object = receivedObject;
...
}
- (void)main {
...
//send request
printf("retreiving photo info from server\n");
NSURL *url = [NSURL URLWithString:[siteUrl stringByAppendingString:@"/connect.php"]];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"lookAtPhoto" forKey:@"purpose"];
[request setRequestCookies: [ASIHTTPRequest sessionCookies]];
объект все еще существует здесь
[запрос startSynchronous];
Тогда объект исчезает здесь!
Я уверен, что это имеет какое-то отношение к разрыву в принципе, но я перестраивал код в течение нескольких дней без успеха.
...
Что? Я не понимаю этого решения, хотя я думаю, что это может быть полезно для меня. Не могли бы вы уточнить? – IQpierce
Хорошо, это странно, у меня была аналогичная проблема, и она тоже ушла, когда я сделал эквивалент: [object сохранить]; в initWithObject. Но я не понимаю, почему это необходимо или имеет какое-либо значение, когда у меня уже было (неатомическое, сохранение) определения свойства переменной. Разве это не должно быть сохранено на моем классе? Если да, то почему я должен сохранить его во второй раз? – IQpierce
IQpierce, в ответ на ваш вопрос, приведенный выше код не вызывает синтезированный аксессор, что и будет выполнять сохранение для вас. Это: объект '= receivedObject;' должно быть: 'self.object = receivedObject;' или, возможно, будет понятнее (хотя очевидно, что это то же самое): '[само SetObject: receivedObject] ; ' Надеюсь, что это поможет! – paulbailey