什么是Objective-C等效于main()?

时间:2010-01-27 06:09:45

标签: objective-c iphone-sdk-3.0

我只是Objective-C的初学者,它的语法只是让我无法理解。

我正在尝试'在iphone 3.0上工作。

直到知道我已经了解到:

  1. 有.h文件,其中包含 每个班级的声明;像我们一样 在C ++中我们可以声明 变量/ data_fields的名称 然后定义
  2. 之外的功能/方法
  3. *函数/方法在.m文件中声明,因此对于每个类 会有一个.h文件,一个.m文件 和a.xib文件
  4. 那么我们如何调用我们选择的函数/方法呢?

    在C,C ++,JAVA,C#的旧语言格式中,我们有一个main()函数来完成我们的控制工作,但它在Obj-c中的main()是什么呢?

    我知道还有一个main()函数,但我几乎不知道它是如何工作的。

3 个答案:

答案 0 :(得分:10)

主函数启动主程序事件循环,通常不要触摸它。

AppDelegate是您想要放置自己的用户代码的地方。如果您生成一个名为Sample的示例iPhone项目,您将生成一个名为SampleAppDelegate的类,它有一个名为- (void)applicationDidFinishLaunching:(UIApplication *)application的方法,这是我认为您正在寻找的入口点。

SampleAppDelegate类实现了一个委托(就像c#中的接口一样)来自UIApplicationDelegateProtocol的一些方法是可选的applicationDidFinishLaunching不是。这通常是您设置第一个视图控制器以执行初始屏幕的地方。

通过消息传递来调用方法。如果我有一个带有方法打印的Tom类,我将初始化并调用该方法

Tom *tom = [[Tom alloc]init];
[tom print];

哦,没有我的方法参数在哪里?我觉得没有括号就丢了。

如果我有一个打印页码并返回void的方法,我可以将其定义为

-(void)printPageNumbers:(int)pageNumber{   
}

并像这样称呼它

Tom *tom = [[Tom alloc]init];
[tom printPageNumbers:2];

多个参数

-(void)printPageNumbersFrom:(int)fromPageNumber toPageNumber:(int)toPageNumber{
}

并将其命名为

Tom *tom = [[Tom alloc]init];
[tom printPageNumbersFrom:2 toPageNumber:5];

它不是一种非常类型安全的语言,你可以做一些时髦的东西,比如你有一个Tom对象数组,你可以发送一条消息。如果在运行时发现数组中的对象不是Tom,则会出现异常。

   [[myArray objectAtIndex:0] printPageNumbersFrom:2 toPageNumber:5];

对上面的一些评论“因此每个类都会有一个.h文件.m文件.xib文件” - 这是不正确的。每个班级都有'.h'和'.m'。

'。xib'是一个视图文件,如果你的类没有ui元素,它将没有'.xib'。称为nib文件的'.xib'不是该类的一部分,它只是引用它。 (你把两者联系起来)

我发现学习曲线相当陡峭。如果您有C和一些OO支持,Objective-C不是一种硬语言。然而,将它与ui放在一起可能会有点痛苦。斯坦福大学有一个他们通过iTunes分发的在线课程我已经看过他们值得的所有时间,请参阅here

享受曲线,我很高兴我不会坐在你所在的地方:)

答案 1 :(得分:3)

你真的应该首先通过Apple开发者网站上的介绍性文档。当你是初学者时,有时候在系统性事物中处理事情是非常有帮助的: Learning Objective-C: A PrimerYour First iPhone Application

答案 2 :(得分:1)

我认为iPhone开发为其他语言/ API方面的程序员带来了两个挑战:

  1. API为您做了很多事情,很难掌握程序的实际结构。人们过去常常从头开始创建应用程序,期望必须做更多的工作才能启动应用程序。
  2. Interface-Builder / nib技术隐藏了经验丰富的程序员习惯处理的复杂性。看起来像视图,控制器等只是突然出现在类中。
  3. 因此,有经验的程序员总是觉得他们在学习API时错过了一些东西,因为他们期望隐藏的复杂性。