Objective c Obj-C在同一类中的静态方法的静态方法上使用@selector?
我在同一个类中有两个静态方法/选择器,一个将另一个作为回调传递给外部方法。然而,我是如何编码的,我得到了一个错误。当这两个方法都是实例方法时,它就起作用了。我已经读到,当第一个方法是使用[self class]的实例方法时,它就起作用了。然而,当这两个都是静态的时,我还没有找到信息,而且我还没有让它工作Objective c Obj-C在同一类中的静态方法的静态方法上使用@selector?,objective-c,static,callback,selector,static-methods,Objective C,Static,Callback,Selector,Static Methods,我在同一个类中有两个静态方法/选择器,一个将另一个作为回调传递给外部方法。然而,我是如何编码的,我得到了一个错误。当这两个方法都是实例方法时,它就起作用了。我已经读到,当第一个方法是使用[self class]的实例方法时,它就起作用了。然而,当这两个都是静态的时,我还没有找到信息,而且我还没有让它工作 +(void)Validate { Callback *managerCallback = [[[Callback alloc] initWithTarget:self Action:@
+(void)Validate {
Callback *managerCallback = [[[Callback alloc] initWithTarget:self Action:@selector(Parse:)] autorelease];
...
}
+(void)Parse:(Callback *)managerCallback {
...
}
谢谢 Callback*managerCallback=[[Callback alloc]initWithTarget:self-Action:@selector(Parse:)]autorelease]
这行代码被设置为调用实例方法Parse:
,而不是您定义的类方法
Objective-C没有静态方法。它有类方法和实例方法 同样,您的方法应该以小写字母开头 赫普·达德普。戴夫是对的 鉴于此:
+(void)Validate {
Callback *managerCallback = [[[Callback alloc] initWithTarget:self Action:@selector(Parse:)] autorelease];
...
}
+(void)Parse:(Callback *)managerCallback {
...
}
一些评论:
- 方法应以小写字母开头
- 在这样的角色中使用类是非常奇怪的;即使你真的只需要其中一个,也要使用一个实例。至少,该实例是一个方便的状态转换桶,如果您需要两个实例,它将使将来的重构更加容易
- 上面的模式假设(我也假设)保留了
的实例。对于回调、计时器和其他一些模式,这是典型的;保留目标,直到最后一次调用目标。然后释放(或自动释放)。但是,通知中心不这样做。通常也不会保留代表Callback
验证和解析都应该以小写字母开头,init方法应该是
initWithTarget:action:`(选择器的每个部分都以小写字母开头)。Objective-C没有静态方法。是的,谢谢,但是我如何设置它来调用类方法呢?是吗<类方法中的code>self
是类
,因此如果目标是类
,选择器是Parse:
,那么(大概)回调将执行[target performSelector:action with object:foo]
,它应该调用+[MyClass Parse:
。。。我错过了什么吗?我现在是怎么写的?当它试图回调时,它会抛出一个exc_bad_访问异常。更正,我遇到的问题是回调对象在调用方法之前是自动释放的。方法应该以小写字母开头:谢谢,这是我从C#/.Net养成的习惯。