当前位置:  开发笔记 > IOS > 正文

UIActivityIndi​​cator是否需要在iPhone上进行手动线程处理

如何解决《UIActivityIndi​​cator是否需要在iPhone上进行手动线程处理》经验,为你挑选了2个好方法。

我正在运行创建一个执行昂贵操作的iPhone应用程序,我想创建一个activityIndi​​cator让用户知道应用程序没有被冻结.

该操作完全在一个事件调用中执行...因此UI框架没有机会接收控件以实际显示并为该指示器设置动画.

使用UIActivityIndi​​cator(或任何其他类似动画)的示例应用程序在不同事件中启动和停止动画,在程序的不同阶段单独触发.

我是否需要手动创建一个单独的线程来运行我的操作,或者是否已经默认支持这种行为?



1> Akusete..:

我刚发现有人在苹果iPhone论坛上提出了一个非常相似的问题. https://devforums.apple.com/message/24220#24220#注意:你必须有一个appleID来查看它.

基本上,是的,你需要开始在不同的线程中运行你的进程,但它很容易做到(从用户'eskimo1'转述)

- (IBAction)syncOnThreadAction:(id)sender
{
    [self willStartJob];

    id myObject = [MyObjectClass createNewObject];
    [self performSelectorInBackground:
        @selector(inThreadStartDoJob:)
        withObject:myObject
    ];
}

- (void)inThreadStartDoJob:(id)theJobToDo
{
    NSAutoreleasePool * pool;
    NSString *          status;

    pool = [[NSAutoreleasePool alloc] init];
    assert(pool != nil);

    status = [theJobToDo countGrainsOfSandOnBeach];

    [self performSelectorOnMainThread:
        @selector(didStopJobWithStatus:)
        withObject:status
        waitUntilDone:NO
    ];

    [pool drain];
}

我在哪里-willStartJob-didStopJobWithStatus我自己的方法:

禁用UI,以防止用户一次启动两个作业

设置活动指标



2> August..:

是的,当UIActivityIndi​​catorView调用保留在主线程上时,您需要将操作放在单独的线程中.

原因如下:如果您开始设置指标视图的动画,然后立即开始您的流程,您的流程将会阻止直到完成,用户将永远不会看到任何"活动".

相反,开始动画指标,然后为您的流程弹出一个新线程.使用通知,委托模式,或performSelectorOnMainThread:withObject:waitUntilDone:让主线程知道该过程已完成.然后停止动画并继续.

这将确保用户在您的流程完成任务时知道正在发生的事情.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有