《了解objective_c的基本方法》由会员分享,可在线阅读,更多相关《了解objective_c的基本方法(4页珍藏版)》请在金锄头文库上搜索。
1、了解 Objective-C 特点及特征是本文要介绍的内容,目前好象只有 Apple 使用 Objective-C 作为其支持的语言吧。 不多说,直接来看详细内容,与 C+的不同之处有:Objective-C 中所有的类都必须继承自 NSObject。Objective-C 中所有对象都是指针的形式。Objective-C 用 self 代替 this。Objective-C 使用 id 代替 void*。Objective-C 使用 nil 表示 NULLObjective-Ck 只支持单继承。Objective-C 使用 YES/NO 表示 TRUE/FALSEObjective-C 使用
2、#import 代替#includeObjective-C 中用消息表示类的方法,并采用aInstance method:argv调用形式。Objective-C 支持反射机制Objective-C 支持 Dynamic Typing, Dynamic Binding 和 Dynamic Loading。与 C+的相同之处有:与 C 共享的部分一致。可以使用 assert(BOOL), 一般用 NSCParameterAssert(BOOL)代替。Objective-C 中的命名前缀说明: 1. NS-:NextStep 2. CF-:Core Foundation 3. CA-:Core A
3、nimation 4. CG-:Core Graphics 5. UI-:User Interface Objective-C 中的消息特殊性: 调用消息的类可以不知道如何响应这个消息。如果它不知道如何处理这个消息,它会自动的将这个消息转给其他的类,比如它的父类。调用消息的类可以是 nil。在 C+中,在使用类方法之前,我们都需要检查对象是否为空,所以在实现析构函数的时候,常会有如下的代码,如 if (var) delete var; 但是在 Objective-C 中,我们就可以直接写var release; 即使 var = nil, 也不会有问题。Objective-C 中的函数声明格式
4、有:1. -/+ (return type) function_name; 2. -/+ (return type) function_name : (parameter type) parameter; 3. -/+ (return type) function_name : 4. (parameter type) parameter1 otherParameter : 5. (parameter_type) parameter2 以上参数说明:-表示一般函数,+表示静态函数。otherParameter 是参数的别名(第一个参数的别名省略),在函数调用时方便指定。Objective-C 中
5、的构造/析构函数 Objective-C 中的 init()/release()对应于 C+的构造/析构函数。alloc()/dealloc()也就对应于 C+的new 和 delete,其中的 dealloc()由于引用计数的自动调用而不用手动调用。Objective-C 中父类的 init()/release()函数需要子类的手动调用。而且每次都必须调用。不同于 C+的自动调用。构造函数(- (id) init)调用形如:CSample* pSample=CSample alloc init;其中 alloc(+ (id) alloc)是继承来的 static 函数,init 是继承来的一
6、般函数,如重写一般函数时,则相当于 C+的覆盖(不带参数)或重载(带参数)。析构函数(- (void) release)将引用计数减 1,当=0 时父类的 release()会自动调用 dealloc(- (void) dealloc);当 Objective-C 没有数据成员时,可省略,建议保留。继承下来的方法,如:-(id) init 可以头文件中省略,建议保留0-C 中只有数据成员的访问限制,没有方法的访问限制。同 C+一样,数据成员有三种访问限制 public, protected, private,缺省是 protected。示例:1. interface AccessExample
7、: NSObject 2. public 3. int publicVar; 4. protected 5. int protectedVar; 6. private 7. int privateVar; 8. 9. end 方法的访问限制可通过 Category 实现示例:1. interface MyClass 2. - (void) sayHello 3. NSLog(Hello); 4. 5. end 6. 7. interface MyClass(Private) 8. - (void) kissGoodbye; 9. end Objective-C 中没有类的静态变量,只有全局变量
8、Objective-C 中的数组 NSArray 可以保存不同类型的数据。Objective-C 也支持 run-time 时的类类型检查1. - (BOOL) isKindOfClass: classObj 用于判断该对象是否属于某个类或者它的子类1. - (BOOL) isMemberOfClass: classObj 用于判断该对象是否属于某个类(这里不包括子类)1. - (BOOL) respondsToSelector: selector 用于判断该对象是否能响应某个消息。这里,我们可以将selector 后面带的参数理解为 C+中的函数指针。注意:1)不要忘了2)selector
9、后面用的是(),而不是。3)要在消息名称后面跟:,无论这个消息是否带参数。如:1. pSquare respondsToSelector:selector(Set: andHeight:)。 2. + (BOOL) instancesRespondToSelector: selector 用于判断该类是否能响应某个消息。这是一个静态函数。-(id) performSelector: selector :调用对象的 selector 方法。conformsToProtocol 类似于 respondsToSelector ,用于动态检查某个对象是否遵守某个协议。Category:在没有源代码的情
10、况下,为一个已经存在的类添加一些新的功能只能添加新的方法,不能添加新的数据成员Category 的名字必须是唯一的Protocol:相当于 C+中的纯虚类形如:1. interface MyDate: NSObject end 使用:1. MyDate * dat = MyDate alloc init; id var = dat; var print。 说明:我们首先声明了 Printing 协议,任何遵守这个协议的类,都必须实现 print 方法。在Objective-C 中,我们通过来表示遵守某个协议。当某个类声明要遵守某个协议之后,它就必须在.m文件中实现这个协议中的所有方法。使用 i
11、d 作为类型,而不是象 C+中的 Printing* var。IBOutlet, IBAction: 这两个东西其实在语法中没有太大的作用。如果你希望在 Interface Builder 中能看到这个控件对象,那么在定义的时候前面加上 IBOutlet,在 IB 里就能看到这个对象的 outlet,如果你希望在 Interface Builder 里控制某个对象执行某些动作,就在方法前面加上(IBAction)。尽量避免在一行语句中进行两层以上的嵌套消息转发:1. - (void) forwardInvocation: (NSInvocation*)anInvocation; 小结:了解 Objective-C 特点及特征的内容介绍完了,希望本文对你有所帮助!