Moo*_*oot 17 oop cocoa cocoa-touch objective-c
所以我需要从Objective-C中的类方法调用一些实例方法...
示例:
+(id)barWithFoo:(NSFoo *) {
[self foo]; //Raises compiler warning.
}
-(void)foo {
//cool stuff
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题; StackOverFlow是你如何在Objective-C中做这些事情的,我是OOP的新手,所以我是疯了,还是有办法做到这一点?
Mat*_* B. 26
没有办法做到这一点.它根本不适用于面向对象.
类是各种各样的东西.而已.他们只是描述了那种事情的作用.
一个例子可能是你有一个'狗'类.您可以使用实例方法来定义狗如何摇尾巴或如何吃东西.您可能有一种购买狗的类方法.
我的宠物狗Fido是阶级犬的一个例子.我可以发送Fido信息,告诉他摇尾巴吃他的食物.但是,我不能要求班级"狗"摇尾巴; 谁的尾巴摇摆?它会是Fido的,还是我邻居的狗?
当您向班级发送消息时,您没有"自我"变量可供使用.没有什么可以告诉自己摇摆自己的尾巴.类消息主要用于创建类的实例或获取其他常规信息.
编辑:澄清一下,最后一段是过于简单化了.bbum描述的类方法中有一个'self'变量 - 它是计算机对类描述的引用.也就是说,我认为我没有机会在课堂方法中使用"自我".
bbu*_*bum 16
如果要调用实例方法,则需要一个实例来调用该方法.
self
是对正在发送消息的实例的引用.因此self
在类方法中是类,self
在实例方法中是类的实例.
所以,天真的,你可能会这样做:
+(id)barWithFoo:(NSFoo *) {
[[[self alloc] init] foo]; //Raises compiler warning.
}
-(void)foo {
//cool stuff
}
Run Code Online (Sandbox Code Playgroud)
当然,这会在非GC应用程序中泄漏内存(因为实例未被释放或自动释放).我将向您介绍Objective-C介绍文档,而不是解释原因.这是一些很棒的东西,涵盖了Objective-C和一般面向对象的编程模式.