在Objective-C中,如何使用';自我';在main()函数中?
我有一个定义:在Objective-C中,如何使用';自我';在main()函数中?,objective-c,xcode,self,Objective C,Xcode,Self,我有一个定义: @interface MyClass: NSObject { NSString *str; id delegate; } -(id)initWithStr:(NSString *)str delegate:(id)delegate; @end 当我主要向我的对象发送消息时,我是这样的: int main(int argc, const char * argv[]) { @autoreleasepool { [[MyClass a
@interface MyClass: NSObject
{
NSString *str;
id delegate;
}
-(id)initWithStr:(NSString *)str
delegate:(id)delegate;
@end
当我主要向我的对象发送消息时,我是这样的:
int main(int argc, const char * argv[])
{
@autoreleasepool {
[[MyClass alloc] initWithStr:@"abc-xyz"
delegate:self];
}
}
出现错误“使用未声明的标识符‘self’”。我是objective-c的新手,我知道“self”表示消息的接收者,但我不知道如何在main()函数中使用它。有谁能告诉我它出了什么问题以及如何修复它吗?您不能像这样使用main()函数。在AppDelegate中执行此操作,那么它将正常工作。发生的是self指向正在执行的对象。main函数不在类中,因此不能对函数调用self,只能对类的方法调用self。你到底想干什么?使用AppDelegate。创建新项目时,Xcode已经为您提供了一些文件。其中一个称为(您的_项目)AppDelegate。这是应用程序的起点 如果在应用程序初始化过程中需要进行任何自定义,请查找AppDelegate.m文件,查找
-(BOOL)application:(UIApplication*)application didnishlaunchingwithoptions:(NSDictionary*)launchOptions
方法,并将代码放在此方法中
永远不要弄乱main.m文件
编辑:
对于Mac OS X,您应该执行以下操作:
创建一个充当委托的类,并将该类添加到委托中
MyDelegate * d;
MyClass * c;
int main(int argc, const char * argv[])
{
@autoreleasepool {
d = [[MyDelegate alloc] init];
c = [[MyClass alloc] initWithStr:@"abc-xyz"
delegate:d];
}
}
然后,在MyDelegate上实现协议的回调
如果你想在main上有一个回调函数,你必须使用一个函数指针。你必须进入纯C的世界。我不推荐你,因为你想使用面向对象的东西。不要两者混用,否则你会制造一个怪物
在Objective-C中,如何在main()函数中使用“self”
这是不可能的
因为“self”只能由对象的实例使用。
main()是一个函数。函数不是对象,而是“独立”的代码。我不知道这一点。你能提供一些示例代码吗?非常感谢。在Xcode中开始一个新项目。它已经为您设置了AppDelegate!但我想建立一个“命令行工具”或守护程序工具。非常感谢!但我想写一个“命令行工具”或一个守护程序应用程序。在这些情况下,项目中根本没有“(YOUR_PROJECT)AppDelegate”,我该怎么办?像iphone的命令行工具这样做是不可能的。除非是越狱。在任何情况下,App delegate都是它的起点,而不是主要功能。您的主要函数应该有如下内容:返回UIApplicationMain(argc、argv、nil、NSStringFromClass([AppDelegate类]),我明白了。非常感谢。顺便说一句,Mac OS X是什么?你想要iPhone还是Mac OS应用程序?如果是mac,你可以注册一个回调函数指针,在你的类中,你必须用这个函数指针初始化对象。那是普通的C。