小编mmi*_*min的帖子

iPhone仿真器和真实设备在消息转发方面的不同行为

我想使用Message Forwarding让任何未实现的getter方法返回0,而不是抛出一个无法识别的选择器异常.喜欢

MyClass *r = [[MyClass alloc] init];
NSNumber *n = (NSNumber *)r;
NSLog(@"%d", [n integerValue]); // output 0
NSLog(@"%f", [n doubleValue]); // output 0.00000
NSLog(@"%@", [n stringValue]); // output (null)
Run Code Online (Sandbox Code Playgroud)

所以我写了这个例子:

#pragma mark -
#pragma mark Application lifecycle

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSNumber *n = (NSNumber *)self;
    NSLog(@"%d", [n integerValue]);
    NSLog(@"%f", [n doubleValue]);
    NSLog(@"%@", [n stringValue]);

    return YES;
}

- (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    NSMethodSignature *ms = [super methodSignatureForSelector:aSelector];
    if(ms)
        return ms;

    // Q = uint64_t, so it …
Run Code Online (Sandbox Code Playgroud)

objective-c objective-c-runtime ios

6
推荐指数
1
解决办法
391
查看次数

NSOperationQueue没有在iPhone上重用线程

我正在使用iPhone SDK 3.1.2,以下代码显示NSOperationQueue不会为每个任务重用该线程.

该代码在Snow Leopard上没有任何问题.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue setMaxConcurrentOperationCount:1];
    for(int i = 0; i < 100; i++) {
        NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];
        [queue addOperation:op];
        [op release];
    }
}

- (void)run {
    static int tc = 0;
    if([[NSThread currentThread] isMainThread]) {
        NSLog(@"MAIN THREAD");
        return;
    } else if([[NSThread currentThread] name] == nil) {
        [[NSThread currentThread] setName:[NSString stringWithFormat:@"THREAD_%d", tc++]]; …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa multithreading

5
推荐指数
1
解决办法
1351
查看次数