【发布时间】:2009-06-22 17:43:30
【问题描述】:
在 Objective-C 类的实现块 (@implementation ... @end) 内部或外部声明的 C 函数(静态或非静态)有什么区别?
这是真的吗?:
如果你需要直接在对象内部戳,你可以把这个函数放在你类的@implementation块里面,然后你可以用C箭头操作符访问实例变量。但这有点淘气,所以为了保持你的本质纯度,你应该在你的对象上使用方法调用。讲道结束。这是邪恶的:
@implementation OblateSphereoid
void drawEggThunk (DrawingContext *context, Rect areaToDraw, void *userData)
{
BWOblateSphereoid *dealie = (BWOblateSphereoid *)userData;
dealie->_frognatz = [NSColor plaidColor];
// and more stuff.
} // drawEggThunk
...
@end // OblateSphereoid
我可以通过这种方式在函数(在同一个类中声明)中访问我的类的实例变量吗?
【问题讨论】:
-
赞成是一个有趣的问题(尽管可能是非常糟糕的做法)只是出于好奇,您只能在课堂上调用 drawEggThunk 吗?
-
我不能,该函数是从 C 子系统调用的回调函数,如您所见,我在设置回调时使用 *userData 传递对 self 的引用。
标签: c objective-c cocoa-touch