- 目前好象只有Apple使用Objective-C作为其支持的语言吧。
- 与C++的不同之处有:
- O-C中所有的类都必须继承自NSObject。
- O-C中所有对象都是指针的形式。
- O-C用self代替this。
- O-C使用id代替void*。
- O-C使用nil表示NULL
- O-Ck只支持单继承。
- O-C使用YES/NO表示TRUE/FALSE
- O-C使用#import代替#include
- O-C中用消息表示类的方法,并采用[aInstance method:argv]调用形式。
- O-C支持反射机制
- O-C支持Dynamic Typing, Dynamic Binding和Dynamic Loading。
- 与C++的相同之处有:
- 与C共享的部分一致。
- 可以使用assert(BOOL), 一般用NSCParameterAssert(BOOL)代替。
- O-C中的命名前缀说明:
- NS-:NextStep
- CF-:Core Foundation
- CA-:Core Animation
- CG-:Core Graphics
- UI-:User Interface
- O-C中的消息特殊性:
- 调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类。
- 调用消息的类可以是nil。在C++中,在使用类方法之前,我们都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如if (var) { delete var; }但是在objective c中,我们就可以直接写[var release];即使var == nil, 也不会有问题。
- O-C中的函数声明格式有:
- -/+ (return type) function_name;
- -/+ (return type) function_name : (parameter type) parameter;
- -/+ (return type) function_name : (parameter type) parameter1otherParameter: (parameter_type) parameter2
- 以上参数说明:-表示一般函数,+表示静态函数。otherParameter是参数的别名(第一个参数的别名省略),在函数调用时方便指定。
- O-C中的构造/析构函数
- O-C中的init()/release()对应于C++的构造/析构函数。alloc()/dealloc()也就对应于C++的new和delete,其中的dealloc()由于引用计数的自动调用而不用手动调用。
- O-C中父类的init()/release()函数需要子类的手动调用。而且每次都必须调用。不同于C++的自动调用。
- 构造函数(- (id) init)调用形如:CSample* pSample=[CSample alloc] init];其中alloc(+ (id) alloc)是继承来的static函数,init是继承来的一般函数,如重写一般函数时,则相当于C++的覆盖(不带参数)或重载(带参数)。
- 析构函数(- (void) release)将引用计数减1,当=0时父类的release()会自动调用dealloc(- (void) dealloc);
- 当O-C没有数据成员时,可省略{},建议保留。
- 继承下来的方法,如:-(id) init可以头文件中省略,建议保留
- 0-C中只有数据成员的访问限制,没有方法的访问限制。
- 同C++一样,数据成员有三种访问限制public, protected, private,缺省是protected。
示例:123456789@interface AccessExample: NSObject {
@public
int publicVar;
@protected
int protectedVar;
@private
int privateVar;
}
@end
- 方法的访问限制可通过Category实现
示例:123456789@interface MyClass
- (void) sayHello {
NSLog(@"Hello");
}
@end
@interface MyClass(Private)
- (void) kissGoodbye;
@end
- 同C++一样,数据成员有三种访问限制public, protected, private,缺省是protected。
- O-C中没有类的静态变量,只有全局变量
- O-C中的数组NSArray可以保存不同类型的数据。
- O-C也支持run-time时的类类型检查
- - (BOOL) isKindOfClass: classObj
用于判断该对象是否属于某个类或者它的子类 - - (BOOL) isMemberOfClass: classObj
用于判断该对象是否属于某个类(这里不包括子类) - - (BOOL) respondsToSelector: selector
用于判断该对象是否能响应某个消息。这里,我们可以将@selector后面带的参数理解为C++中的函数指针。
注意:
1)不要忘了@
2)@selector后面用的是(),而不是[]。
3)要在消息名称后面跟:,无论这个消息是否带参数。如:[pSquare respondsToSelector:@selector(Set: andHeight:)]。 - + (BOOL) instancesRespondToSelector: selector
用于判断该类是否能响应某个消息。这是一个静态函数。 - -(id) performSelector: selector :调用对象的selector方法。
- conformsToProtocol 类似于respondsToSelector ,用于动态检查某个对象是否遵守某个协议。
- - (BOOL) isKindOfClass: classObj
- Category:在没有源代码的情况下,为一个已经存在的类添加一些新的功能
- 只能添加新的方法,不能添加新的数据成员
- Category的名字必须是唯一的
- Protocol:相当于C++中的纯虚类
- 形如:@interface MyDate: NSObject <Printing> { } @end
- 使用:MyDate * dat = [[MyDate alloc] init];id<Printing> var = dat; [var print]。
- 说明:我们首先声明了Printing 协议,任何遵守这个协议的类,都必须实现print 方法。在Objective C 中,我们通过<>来表示遵守某个协议。当某个类声明要遵守某个协议之后,它就必须在.m文件中实现这个协议中的所有方法。使用id<Printing> 作为类型,而不是象C++中的Printing* var。
- IBOutlet, IBAction: 这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。
- 尽量避免在一行语句中进行两层以上的嵌套
- 消息转发:- (void) forwardInvocation: (NSInvocation*)anInvocation;
- 浏览: 11438882 次
最新评论
-
wahahachuang8:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
WebSocket和node.js -
xhpscdx:
写的这么详细,全面,对架构师的工作职责,个人能力都进行了梳理。 ...
架构师之路---王泽宾谈架构师的职责 -
xgbzsc:
是http://www.haoservice.com 吗?
android WIFI定位 -
lehehe:
http://www.haoservice.com/docs/ ...
android WIFI定位 -
lehehe:
http://www.haoservice.com/docs/ ...
android WIFI定位
相关推荐
这儿的运行时系统扮演的角色类似于Objective-C语言的操作系统,Objective-C基于该系统来工作。本文档将具体介绍NSObject类以及Objective-C程序是如何和运行时系统交互的。特别地,本文档还给出来怎样在运行时动态地加
Objective-C语言的许多决策可以在编译和运行时执行。只要有可能,它是动态的。这意味着Objective-C语言不仅需要一个编译器,还需要一个运行时系统来执行编译的代码。Runtime系统是一种用于Objective-C语言的操作系统...
希望这个简单的Objective-C语言教程能够为你提供一个入门的起点。Objective-C是一种面向对象的编程语言,广泛应用于Mac OS和iOS开发。通过学习Objective-C的基本语法、类和对象、控制流程和方法等内容,你将能够编写...
《objective-c程序设计》通过大量的实例系统地介绍了objective-c语言的基本概念、语法规则、框架、类库及开发环境。读者在阅读《objective-c程序设计》后,可以掌握objective-c语言的基本内容,并进行实际的iphone/...
C语言主要知识点巩固(学习Objective-C 的前提),PPT格式。
《Objective-C 程序设计(第4版)》作者假设读者没有面向对象程序语言或者C语言(Objective-C基础)编程经验,因此,初学者和有经验的程序员都可以使用这本《Objective-C 程序设计(第4版)》学习Objective-C。...
用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计模式,收集各种例子,方便大家学习和普及设计模式。.zip用Objective-C语言实现了各种设计...
Objective-C 是一种通用、面向对象的编程语言,广泛应用于 macOS 和 iOS 等苹果平台的开发中。它是 C 语言的超集,结合了 Smalltalk 式的消息传递机制和 C++ 的特性。Objective-C 是苹果公司采用的主要编程语言之一...
Objective-C 基础教程,从入门到精通 Objective-C 基础教程,从入门到精通,是你学习 Objective-C 的经典之作。
中文名: Objective-C基础教程 作者: Mark Dalrymple Scott Knaster译者: 高朝勤 杨越 刘霞图书 分类: 软件 资源格式: PDF 版本: 扫描版 出版社: 人民邮电出版社 书号: ISBN: 9787115208774 发行时间: 2009...
Objective-C是创建Mac OS应用和iPhone应用的主要语言,优雅的面向对象编程环境与C语言特性珠联璧合,造就了它的不俗表现。 本书全面而系统地讲述Objective-C语言的基础知识和面向对象编程的重要概念,结合实例...
在windows系统下搭建Objective-C开发环境,由于公司要做iphone开发,个人学习objc(Objective-C)语法,所以在windows7下搭建了一个objc开发环境,现把自己整理的帮助文档拿来与大家分享,希望能对大家有所帮助。...
elcome to Learn Objective- C on the Mac! This book is designed to teach you the basics of the Objective- C language. Objective- C is a superset of C and is the language used by many (if not most) ...
这是一个基于Objective-C语言的基础案例集 旨在用于给初学者快速了解Objective-C语言的语法 .zip
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。本书结合理论知识与示例程序,全面而系统地讲述Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性和Cocoa工具包的功能及其中...
Objective-C高级编程 iOS与OS X多线程和内存管理.pdf
资源里面包含Objective-C 2.0程序设计 原书中文版第2版及代码,还包含Effective Objective-C 2.0英文版完整的电子书
这是一个基于Objective-C语言的基础案例集。旨在用于给初学者快速了解Objective-C语言的语法。.zip