使用performSelectorOnMainThread iOS在调用中强制转换对象

使用performSelectorOnMainThread iOS在调用中强制转换对象,ios,performselector,Ios,Performselector,如果我使用 [self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo waitUntilDone:YES] 在方法中-(void)uploadDidEnd:(id)sender 哪个对象是发送者?在调用中,foo是自定义类吗?如何在对象中转换此发件人 我在试着投,但我有 '-[_NSThreadPerformInfo CountY]: unrecognized selector sent

如果我使用

[self performSelectorOnMainThread:@selector(uploadDidEnd:) withObject:foo
        waitUntilDone:YES]
在方法中-(void)uploadDidEnd:(id)sender

哪个对象是发送者?在调用中,foo是自定义类吗?如何在对象中转换此发件人

我在试着投,但我有

'-[_NSThreadPerformInfo CountY]: unrecognized selector sent to instance 0x52bbd0'
在通知中,我使用从发件人到NSNotification的强制转换,通知具有object属性,但对于NSThread,我没有找到

谢谢

  • 声明为
    发送方的参数是传递给方法的唯一参数。performSelectorOnMainThread:withObject:waitUntilDone:将
    withObject
    之后的参数传递给要执行的选择器,因此是,此处
    foo
    将传递给UploadDiEnd:

  • 铸造不是解决办法。Objective-C是一种动态语言,因此即使强制转换消除了编译器警告,对象的实际实现也不会改变,因此它自然不会响应消息

  • 声明为
    发送方的参数是传递给方法的唯一参数。performSelectorOnMainThread:withObject:waitUntilDone:将
    withObject
    之后的参数传递给要执行的选择器,因此是,此处
    foo
    将传递给UploadDiEnd:

  • 铸造不是解决办法。Objective-C是一种动态语言,因此即使强制转换消除了编译器警告,对象的实际实现也不会改变,因此它自然不会响应消息

  • 你可以想到:

    [self performSelectorOnMainThread:@selector(uploadDidEnd:)
          withObject:foo
          waitUntilDone:YES]
    
    类似于:

    [self uploadDidEnd:foo];
    
    你确定这就是你想要做的吗

    如果是这样:在您的
    uploadDiEnd:
    实现中,您可以将foo强制转换为任何对象类型:

    - (void)uploadDidEnd:(id)sender
    {
      FooClass *foo = (FooClass *)sender;
      [foo doSomething]; // or whatever
    }
    
    你可以想到:

    [self performSelectorOnMainThread:@selector(uploadDidEnd:)
          withObject:foo
          waitUntilDone:YES]
    
    类似于:

    [self uploadDidEnd:foo];
    
    你确定这就是你想要做的吗

    如果是这样:在您的
    uploadDiEnd:
    实现中,您可以将foo强制转换为任何对象类型:

    - (void)uploadDidEnd:(id)sender
    {
      FooClass *foo = (FooClass *)sender;
      [foo doSomething]; // or whatever
    }
    

    但是我如何在调用的方法中获取传递的对象foo?您想如何“获取”它?它就在参数中。但是我如何在调用的方法中获取传递的对象foo?您想如何“获取”它?就在争论中。