我有一个Obj-C对象,里面有很多方法.有时一个方法需要在同一个对象内调用另一个方法.我似乎不知道如何让C方法调用Obj-C方法...

WORKS:调用Obj-C方法的Obj-C方法:

[self objCMethod];

WORKS: Obj-C方法调用C方法:

cMethod();

DOESN'T WORK: C方法调用Obj-C方法:

[self objCMethod];     // <--- this does not work

最后一个示例导致编译器抛出以下错误:

error: 'self' undeclared (first use in this function)

两个问题.为什么C函数不能看到"self"变量,即使它在"self"对象中,我如何调用它而不引起错误?非常感谢您的帮助!:)

推荐答案

为了实现这一点,您应该像这样定义C方法:

void cMethod(id param);

当你这样称呼它时:

cMethod(self);

然后,你就可以写:

[param objcMethod];

在你cMethod岁的时候.

这是因为self变量是自动传递给Objective-C方法的特殊参数.由于C方法不享受这种特权,如果你想使用self,你必须自己发送.

更多信息请参见Method Implementation section of the programming guide页.

Objective-c相关问答推荐

iOS9 - 这个应用程序正在从后台线程修改自动布局引擎 - 在哪里?

如何使 UIView 动画序列重复和自动反转

在 Objective-C 中实现纯虚方法

防止其他程序员调用 -init 的最佳方法

在 Objective-C 中在 iPhone 上使用 HTTP POST 和 GET 的教程

如果安装了应用程序,如何以编程方式判断?

如何在目标 C 中创建单例类

如何判断字符串是否仅包含目标C中的字母数字字符?

接口类型不能静态分配?

如何在 iPhone 中将 NSData 转换为字节数组?

dyld:找不到符号:try 运行 iOS 应用程序时的 _NSURLAuthenticationMethodClientCertificate

为什么是 [object doSomething] 而不是 [*object doSomething]?

如何在iphone的objective-c中以编程方式调整图像大小

NSSet 到 NSArray 转换调用 objectAtIndex?

为什么不鼓励使用伞式框架?

如何为 iPhone 应用程序创建多个主题/皮肤?

NSHTTPCookieStorage 状态未在应用退出时保存.那里有任何明确的知识/文档吗?

如何以编程方式在 UINavigationController 中按下返回按钮

UITableView ,重新加载时滚动到底部?

CALayer:仅在一侧添加边框