• IOS中performSelector线程使用


    Cocoa框架中 NSObject 提供了名字中包含performSelector的方法来实现多线程编程技术。

    例如:

    performSelectorInBackground:withObject方法;

    performSelectorOnMainThread方法;

    定义这些方法要遵从以下限制:

    1、这些方法运行在各自的线程里,因此必须为这些Cocoa对象创建一个自动释放池;

    2、这些方法不能有返回值,且要么没有参数,要么只有一个参数,格式如下:

    -(void) myMethod;

    -(void) myMethod:(id) myObject;

    当方法执行完成后,OC运行时会清理并弃掉线程。方法执行结束后,并不会通知你。

    如果想要在后台执行方法,如下:

    [self performSelectorInBackground:@selector(doWork)  withObject:nil];

    [self performSelectorInBackground:@selector(doWork)  withObject:arugmentObject];

    ////后台线程处理的方法

    -(void) doWork

    {

      NSAutoreleasePool *pool=[[NSAutoreleasePool  alloc] init];

      [slef  performSelectorOnMainThread:@selector(doneMainThread)  withObject:nil   waitUntilDone:NO];

      [pool  drain];

    }

    //主线程处理方法

    -(void) doneMainThread

    {

      //.........

    }

    //代码例子如下:

    //.h文件

    #import <Foundation/Foundation.h>

     @interface SelectorTester : NSObject

    - (void)runSelectors;

    @end

    //.m文件

    #import "SelectorTester.h"
    
    @implementation SelectorTester
    
    - (void)runSelectors
    {
        [self performSelector:@selector(myBackgroundMehod1)];
        [self performSelector:@selector(myBackgroundMethod2:) withObject:@"Hello Selector"];
        NSLog(@"Done performing selectors");
    }
    
    - (void)myBackgroundMehod1
    {
        @autoreleasepool
        {
            NSLog(@"myBackgroundMehod1");
        }
    }
    
    - (void)myBackgroundMethod2:(id)object
    {
        @autoreleasepool
        {
            NSLog(@"myBackgroundMethod2 %@", object);
        }
    }
    
    @end

    // main文件

    #import <Foundation/Foundation.h>
    #import "SelectorTester.h"
    
    int main(int argc, const char * argv[])
    {
        @autoreleasepool
        {
            SelectorTester *tester = [[SelectorTester alloc] init];
            
            [tester runSelectors];
        }
        return 0;
    }
  • 相关阅读:
    加法图灵机
    Experiment 1
    进制转换
    快速排序
    辗转相除、线段交点、多角形面积公式
    JS如何优雅监听容器高度变化
    解决react和其他框架之间的交互问题
    MacBook Pro触控板手势
    代理 请求登录失效(显示未登录)问题
    Web端 长按事件
  • 原文地址:https://www.cnblogs.com/zhaosuning/p/9448562.html
Copyright © 2020-2023  润新知