码迷,mamicode.com
首页 > 其他好文 > 详细

performSelector:相关的知识

时间:2015-05-22 09:54:36      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

来看一个例子:

#import <Foundation/Foundation.h>

@interface MyTst : NSObject

- (void) print;

@end

@implementation MyTst

- (void) print

{

    NSLog(@"xxxxxxxxxx");

}

@end

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

#import "MyTst.h"

int main(int argc, char * argv[]) {

//    @autoreleasepool {

//        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

//    }

    

    MyTst *myClass = [[MyTst alloc] init];

// 1    [myClass performSelector:@selector(print) withObject:nil afterDelay:0];

    

//2     [myClass performSelector:@selector(print) withObject:nil];

    

    return 0;

}


上面的代码1、和2 会执行吗?

答案是:2会执行,因为performSelector:@selector(print) withObject:nil相当于向runloop发送了一个启动通知,收到这个通知后print方法会被立刻执行

而1不会被执行。-performSelector:withObject:afterDelay: 方法本质上是一个timer回调,而timer需要依靠RunLoop才能运转,如果这是个非UI的程序且不手动起个RunLoop的话,程序应该直接就结束了吧,就算afterDelay:0 也没用。如果要想执行得 [[NSRunLoop currentRunLoop] run];才行。

performSelector:相关的知识

标签:

原文地址:http://my.oschina.net/u/2252309/blog/418024

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!