gpt4 book ai didi

iphone - iPhone Facebook SDK 的 Facebook 类有取消方法吗?

转载 作者:太空狗 更新时间:2023-10-30 03:28:21 25 4
gpt4 key购买 nike

有没有办法取消 Facebook 对象的未决请求?

我在 Facebook.h 中找不到任何方法,也找不到访问底层 NSURLConnection 对象的方法。如果我在导航栏上按回键,并且它们是一个挂起的异步 Facebook 请求,该请求会在响应到来后尝试将消息发送到已释放的 view,从而导致应用程序崩溃。

最佳答案

对于遇到此问题的任何人,Matt 的观察结果似乎不适用于最新的 facebook-iphone-sdk。参数不再显式保留在相关方法中:

+ (FBRequest *)getRequestWithParams:(NSMutableDictionary *) params
httpMethod:(NSString *) httpMethod
delegate:(id<FBRequestDelegate>) delegate
requestURL:(NSString *) url {

FBRequest* request = [[[FBRequest alloc] init] autorelease];
request.delegate = delegate;
request.url = url;
request.httpMethod = httpMethod;
request.params = params;
request.connection = nil;
request.responseText = nil;

因此委托(delegate)的内存管理回退到 .h 文件中的属性声明:

@property(nonatomic,assign) id<FBRequestDelegate> delegate;

这意味着现在可能会发生崩溃,因为可以在 FBRequest 完成之前释放委托(delegate)对象。

更新:

this 中建议了一种可能的解决方法允许取消未决 FBRequests 的问题。

更新 2:

为避免在 FBRequest 完成之前解除分配委托(delegate)的情况下发生崩溃,您需要在解除分配委托(delegate)时取消事件的 FBRequest 连接(这基本上是 Matt 在链接问题中的建议)。但是(我不确定这是否是新的),您可以直接对 FBRequest 执行此操作,因为它公开了它的 NSURLConnection 属性。因此,如果您将 FBRequest 对象保留在属性中:

@property (nonatomic, retain) FBRequest *myRequest;

并在调用时保存请求对象:

self.myRequest = [facebookObj requestWithGraphPath:@"me" andDelegate:self];

您可以在 dealloc 中清除所有内容:

- (void)dealloc
{
if( myRequest ) {
[[myRequest connection] cancel];
[[myRequest release];
}

...

[super dealloc];
}

显然,处理完响应后,您可能还应该释放委托(delegate)方法中的 FBRequest 属性并将其设为 nil。

关于iphone - iPhone Facebook SDK 的 Facebook 类有取消方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com