【问题标题】:ASIHTTPRequest swallows up my NSOperation variables in synchronous modeASIHTTPRequest 在同步模式下吞噬了我的 NSOperation 变量
【发布时间】:2010-01-26 00:11:39
【问题描述】:

嘿,我一直在与这个问题作斗争一段时间。也许我在多线程知识方面缺少一些东西,但这就是发生的事情。当我创建一个 nsoperation 队列时,所有分配的变量都会在“[request startSynchronous];”之后被清除。一行代码。这就是我要说的:

@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]];

对象在这里仍然存在

[请求开始同步];

然后对象就消失在这里了!

我确信这与原则理解上的差距有关,但我几天来一直在重新安排代码,但没有成功。

...

【问题讨论】:

    标签: cocoa asihttprequest nsoperation nsoperationqueue


    【解决方案1】:

    天哪,我简直不敢相信。我没有以正确的方式设置对象来触发属性保留。 > self.object

    【讨论】:

    • 什么?我不明白这个解决方案,但我认为它可能对我有用。你能详细说明一下吗?
    • 好吧,这很奇怪,我遇到了类似的问题,当我执行以下操作时它也消失了:[object retain];在 initWithObject 中。但是我不明白为什么这是必要的,或者有什么不同,当我已经(非原子,保留)变量的属性定义时。它不应该已经保留在我的课堂上吗?如果是这样,为什么我必须第二次保留它?
    • IQpierce,在回答您的问题时,上面的代码不会调用合成访问器,这会为您执行保留。这个:object = receivedObject; 应该是:self.object = receivedObject; 或者更清楚一点(尽管显然是同一件事):[self setObject:receivedObject]; 希望有帮助!
    • @paulbailey 是的,这正是问题所在,谢谢你的澄清,对不起,我没有更好地澄清。
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2013-02-11
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多