iOS NSOperation子类在执行时冻结设备旋转

时间:2011-08-08 09:18:54

标签: ios multithreading subclass nsoperation nsoperationqueue

我需要你的帮助。我编写了自己的自定义NSOperation类,名为GetNewsOperation。我称之为:

GetNewsOperation *getNewsOperation = [[GetNewsOperation alloc] initWithLocalNewsCategories:self];
[loadNewsOperationQueue addOperation:getNewsOperation];
[getNewsOperation release];

在GetNewsOperation类中,我实现了 init 方法进行初始化, main 方法用于执行操作并将数据返回给主线程。

主要方法如下:

- (void)main {
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    AppSettingsController *sharedAppSettingsController = [AppSettingsController sharedAppSettingsController];

    if( [type isEqualToString:@"getCategory"] ) {
        NSMutableArray *parsedData = [[NSMutableArray alloc] initWithArray:[sharedAppSettingsController getLocalNewsCategories]];

        [newsViewController performSelectorOnMainThread:@selector(loadDataResponse:) withObject:[NSArray arrayWithObjects:parsedData, nil] waitUntilDone:NO];

        [parsedData release]; parsedData = nil;
    }

    [pool release];
}

一切正常,但我有一个小问题。调用此操作时,应用程序不会在设备方向更改时旋转。操作完成后会发生变化。

据我所知,这个操作肯定在新线程中运行(不在main中)因为应用程序中的所有其他元素都是活动的(不是冻结的)。但我只有方向问题。如果应用程序仅在此操作发生时不旋转,那么该应用程序看起来很糟糕......

我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

实际上它的工作方式与预测相似。我在阻止应用程序的主线程上做了其他事情。