收藏 分销(赏)

从-C++-到-Objective-C(2):语法概述.doc

上传人:精*** 文档编号:3107291 上传时间:2024-06-18 格式:DOC 页数:3 大小:27KB 下载积分:5 金币
下载 相关 举报
从-C++-到-Objective-C(2):语法概述.doc_第1页
第1页 / 共3页
从-C++-到-Objective-C(2):语法概述.doc_第2页
第2页 / 共3页


点击查看更多>>
资源描述
从 C++ 到 Objective-C(2):语法概述 作者: DevBean 日期: 2011 年 03 月 18 日发表评论 (2)查看评论 关键字 Objective-C 是 C 语言的超集。类似于 C++,良好的 C 源代码能够直接被 Objective-C 编译器编译。不同于 C++ 直接改变 C 语言的设计思路,Objective-C 仅仅是在 C 语言的基础上增加了一些概念。例如,对于类的概念,C++ 是增加了一个全新的关键字 class,把它作为语言内置的特性,而 Objective-C 则是将类转换成一个 struct 去处理。所以,为了避免冲突,Objective-C 的关键字都是以 @ 开头。一个简单的关键字列表是:@class, @interface, @implementation, @public, @private, @protected, @try, @catch, @throw, @finally, @end, @protocol, @selector, @synchronized, @encode, @defs。Objective-C 2.0 又增加了 @optional, @required, @property, @dynamic, @synthesize 这几个。 另外的一些值同样也类似于关键字,有 nil 和 Nil, 类型 id, SEL 和 BOOL, 布尔变量 YES 和 NO。最后,特定上下文中会有一些关键字,分别是:in, out, inout, bycopy, byref, oneway 和 getter, setter, readwrite, readonly, assign, retain, copy, nonatomic 等。 很多继承自 NSObject 的函数很容易与关键字混淆。比如 alloc, release 和 autorelease 等。这些实际都是 NSObject 的函数。另外一个需要注意的是 self 和 super。self 实际上是每一个函数的隐藏参数,而 super 是告知编译器使用 self 的另外语义。 注释 Objective-C 使用 // 和 /*…*/ 两种注释风格。 变量声明的位置 Objective-C 允许在代码块的中部声明变量,而不仅仅在块的最开始处。 新增的值和变量 BOOL, YES, NO C++ 中使用 bool 表示布尔类型。Objective-C 中则是使用 BOOL,其值为 YES 和 NO。 nil, Nil 和 id 简单来说: · 每一个对象都是 id 类型的。该类型可以作为一种弱类型使用。id 是一个指针,所以在使用时应注意是否需要再加 *。例如 id *foo = nil,实际是定义一个指针的指针; · nil 等价于指向对象的 NULL 指针。nil 和 NULL 不应该被混用。实际上,nil 并不简单是 NULL 指针; · Nil 等价于指针 nil 的类。在 Objective-C 中,一个类也是一个对象(作为元类 Meta-Class 的实例)。nil 代表 NULL 指针,但它也是一个类的对象,nil 就是 Nil 类的实例。C++ 没有对应的概念,不过,如果你熟悉 Java 的话,应该知道每一个类对象都对应一个 Class 实例,类似这个。 SEL SEL 用于存储选择器 selector 的值。所谓选择器,就是不属于任何类实例对象的函数标识符。这些值可以由 @selector 获取。选择器可以当做函数指针,但实际上它并不是一个真正的指向函数的指针。 @encode 为了更好的互操作性,Objective-C 的数据类型,甚至自定义类型、函数或方法的元类型,都可以使用 ASCII 编码。@encode(aType) 可以返回该类型的 C 字符串(char *)的表示。 源文件 与 C++ 类似,Objective-C 同样建议将声明和实现区分开。Objective-C 的头文件后缀名是 .h,源代码后缀名是 .m。Objective-C 使用 #import 引入其它头文件。与 #include 不同的是,#import 保证头文件只被引入一次。另外,#import 不仅仅针对 Objective-C 的头文件,即便是标准 C 的头文件,比如 stdlib.h,同样可以使用 #import 引入。 C++ 头文件 源文件 //In file Foo.h #ifndef __FOO_H__ //compilation guard #define __FOO_H__ // class Foo { ... }; #endif //In file Foo.cpp #include "Foo.h" ... Objective-C 头文件 源文件 //In file Foo.h //class declaration, different from //the "interface" Java keyword @interface Foo : NSObject { ... } @end //In file Foo.m #import "Foo.h" @implementation Foo ... @end NS 前缀 我们前面看到的类 NSObject,NSString 都有一个前缀 NS。这是 Cocoa 框架的前缀(Cocoa 开发公司是 NeXTStep)。 函数和方法的区别 Objective-C 并不是“使用方括号表示函数调用”的语言。一开始很容易把 [object doSomething]; 理解成 object.doSomething(); 但实际上并不是这么简单。Objective-C 是 C 语言的超集,因此,函数和 C 语言的声明、定义、调用是一致的。C 语言并没有方法这一概念,因此方法是使用特殊语法,也就是方括号。不仅仅是语法上的,语义上也是不同的:这并不是方法调用,而是发送一条消息。看上去并没有什么区别,实际上,这是 Objective-C 的强大之处。例如,这种语法允许你在运行时动态添加方法。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服