zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    P1246 编码
    P2638 安全系统
    P3913 车的攻击
    P2789 直线交点数
    What?100%基于深度强化学习的对冲基金
    AI | 重磅推荐!哥大开源“FinRL”:一个用于量化金融自动交易的深度强化学习库
    神经霍克斯过程:一个基于神经网络的自调节多变量点过程
    量化都玩IPU了?Man Group-Oxford研究所给你答案
    为什么数字资产生态系统能够增长到2万亿美元以上?
    ICML 获奖者陆昱成:去中心化机器学习的理论极限在哪里?
  • 原文地址:https://www.cnblogs.com/zhaosuning/p/9448562.html
Copyright © 2011-2022 走看看