Objective-C及其与C的关系

时间:2010-06-16 02:10:53

标签: iphone c objective-c

实际上,我对移动编程很陌生,需要接受你的意见。

我是一名具有C背景的Java开发人员,我需要开始学习Objective-C与目标为iPhone 做移动应用程序以刷新我在C中的知识(据我所知, Objective-C是C的纯超集,不是吗?)。

所以,问题是,有了目标C,我能否实现我的两个目标:

  1. 适用于iPhone的移动设备刷新我的
  2. 用C
  3. 刷新我的知识

6 个答案:

答案 0 :(得分:4)

目标C是C的另一个面向对象的扩展。你在C中所知道的一切都会起作用。

理解目标C的最佳文档是

http://developer.apple.com/mac/library/documentation/cocoa/conceptual/ObjectiveC/ObjC.pdf

你可以用C做很多事,但是你会严重残废。 C的每个功能都适用于Obj-C。

如果你真的喜欢受伤的世界,你可以考虑将C ++和Objective-C结合起来的Objective-C ++

答案 1 :(得分:1)

是的,Objective-C是C的纯超集;但它并不像C那样感觉。它更像是java,+ - 一些语法变化,比传统的指针算术使用系统 - 编程低级别C.最明显的例子是,例如,iPhone编程传统上使用NSString类来表示字符串,而不是一个C风格的* char。您仍然可以使用* char来表示Objective-C中的字符串;它只是不受欢迎,几乎所有你将用它(包括,很可能,100%的所有iPhone功能)NSString类更清洁和更好的功能。也就是说,如果不是成语,它会让你很好地回到语法。

是的,Objective-C对iPhone开发人员来说是强制性的。所以,是的,学习Objective-C是实现两个目标的方法。

答案 2 :(得分:1)

Objective-C是C的严格超集。但是,在我看来,语法中有很多附加内容是压倒性的,我可以保证你会在C语言中使用很多这些新增内容,因为Apple的框架。所以如果你要用C来刷新你的记忆,我个人会做其他事情。

举个例子:

在大多数情况下,所有编程都在两个类中完成。 AppDelegate或ViewController。在C中调用函数看起来像:

foo();

但是,因为所有这些编程都是在类中完成的,所以需要用对象调用它:

FooViewController *FooCaller;
[FooCaller foo];

在iPhone编程中经常使用这种语法,但在iPhone编程中不经常使用C语法。

另外,至于方法论,它也是非常不同的,因为Objective-C是OO而C是程序性的。

答案 3 :(得分:0)

Objective-C是C的超集。

  1. 也许。可以使用大多数客观的C功能而无需返回常规C.

答案 4 :(得分:0)

一个有趣的说明是,Objective-C开始作为C的预处理器开始。来自/usr/include/objc/objc.h

typedef struct objc_class *Class;
typedef struct objc_object {
    Class isa;
} *id;

每个Objective-C对象都可以描述为一个结构体,其中包含指向其类,其ivars和其方法的函数指针的指针。消息发送等等使事情变得复杂,但是当它归结为它时,如果你足够耐心,一切都可以在C中完成。

答案 5 :(得分:0)

根据我对mac开发的经验,我唯一需要使用C的时候就是当我回到旧的Carbon apis时。可可都是目标C,与旧学校c完全不同。据我所知,所有iPhone API都使用目标c,如果您使用的是已经编写过的库,则只需要使用强盗样式c。