在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。