gpt4 book ai didi

objective-c - ARC Objective-C : How can self be deallocated?

转载 作者:行者123 更新时间:2023-12-03 16:28:57 26 4
gpt4 key购买 nike

我正在创建一个工作流程来浏览网站,工作流程的每一步都必须加载 n 帧,然后知道它准备好了(我必须实现超时)。

我不明白为什么 [self next] 给我这个错误:* -[WebWorkflow next]:发送到已释放实例 0x105796ef0 的消息

考虑这个委托(delegate)函数:

- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
frameCounter++;
NSInteger frames = [(WebWorkflowStep *)[steps objectAtIndex:index] frames];
NSLog(@"Frame counter %ld of %ld", frameCounter, frames);
[self next];
}

下一个方法:

-(void) next
{
if ( index < [steps count])
{
frameCounter = 0;
index = index + 1;
WebWorkflowStep *step = [steps objectAtIndex:index-1];
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:step forKey:@"selector"];
[[NSNotificationCenter defaultCenter] postNotificationName:EVENT_WORKFLOW_NEXT object:nil userInfo:userInfo];

}
}

注释:

- WebWorflow 又名“self”已由另一个具有强属性的类创建/绑定(bind)

像这样:

@interface AController : NSObject <APIProtocol>
{
WebView *webview;
NSMutableArray *accounts;

WebWorkflow *workflow;
}

@property (strong) WebWorkflow *workflow;

...

我确实创建了这样的工作流程:

workflow = [[WebWorkflow alloc] initWithWebView:webview];
NSArray *getPicturesWorkflow = [NSArray arrayWithObjects:
[[WebWorkflowStep alloc] initWithSelector:@"open" andLoadFrames:0],
[[WebWorkflowStep alloc] initWithSelector:@"login" andLoadFrames:2],
[[WebWorkflowStep alloc] initWithSelector:@"getPictures" andLoadFrames:8],
nil];
[workflow setSteps:getPicturesWorkflow];

它的初始化如下:

-(id)initWithWebView:(WebView *)webview
{
self = [ super init];
if(self) {
timeout = 10;
index = 0;
web = webview;
frameCounter = 0;
[web setFrameLoadDelegate:self];
}
return self;
}

最佳答案

AController 实例拥有一个 Web View ,并且是该 Web View 的委托(delegate)。 AController 实例正在被释放(出于某种原因......我们需要看看它的所有者如何管理它)。由于它可能在加载过程中被释放,因此它应该自行清理,如下所示:

- (void)dealloc {
[web stopLoading:self]; // or webView, not sure what you call it
}

这将防止崩溃。它还将放弃负载。如果您不想这样做,您需要弄清楚为什么 AController 实例被释放。

这样做的第一步是在 dealloc 方法中设置一个断点。

关于objective-c - ARC Objective-C : How can self be deallocated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14427185/

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