object-c 基础小结

来源:互联网 发布:python公约数 编辑:程序博客网 时间:2024/03/29 06:10

一 基本语法

1 头文件.h,实现文件.m

2  import 是引用

3  头文件中用

@interface开始一个类的定义,

@end

结束

.m文件中用

@implementation开始实现

@end

结束

4 函数写法

 

-(void)setNumerator: (int) n;

 

-(void)setNumerator: (int) n andDenominator: (int) d;

 

method:label1:label2:label3:,而呼叫的方法是 [obj method:param1 label1: param2 label2: param3 label3: param4]

 

 

这个是头文件中的申明,-就表示成员函数,如果是加号,那么就相当于static,

setNumerator是函数名称,void是返回,后面的(int) n,是参数,如果没有参数,那么就直接-(void) setNumerator;

5函数调用

 

在Objective-C 中呼叫 methods 的方法是[object method],就像 C++ 的object->method()。

Eg:

[fracsetNumerator: 1]; //frac是对象指针,1是参数

 

[frac2setNumerator: 1 andDenominator: 5];

 

 

 

Objective-C没有 value型别。所以没有像 C++ 的 Fraction frac; frac.print(); 这类的东西。在 Objective-C 中完全使用指针来处理对象。

 

 

6  oc中用self 代贴this

 

self = [super init];

 

nil是 Objective-C 用来表达 C/C++ 中 NULL 的方式,

if(self != nil )

7 访问权限

 

预设的权限是 @protected

 

@interface Access: NSObject {

§ @public

§ int publicVar;

§ @private

§ int privateVar;

§ int privateVar2;

§ @protected

§ int protectedVar;

§ }

@end

 

如同你所看到的,就像 C++ 中 private: [list of vars] public: [listof vars] 的格式,它只是改成了@private, @protected, 等等。

 

8 异常情况(Exceptions)

 

注意:异常处理只有 Mac OS X 10.3 以上才支持。

 

#import<Foundation/NSException.h>

 

@try {

§ [cup fill];

§ } @catch (CupWarningException *e ) {

§ printf( "%s: ",[[e name] cString] );

§ } @catch (CupOverflowException *e ) {

§ printf( "%s: ",[[e name] cString] );

§ } @finally {

§ [cup print];

§ }

9 动态识别(Dynamic types)

-(BOOL) isKindOfClass: classObj

is object a descendent or member of classObj 此对象是否是 classObj 的子孙或一员

-(BOOL) isMemberOfClass: classObj

is object a member of classObj 此对象是否是 classObj 的一员

-(BOOL) respondsToSelector: selector

does the object have a method named specifiec by the selector

                        此对象是否有叫做    selector 的 method                                                                

+(BOOL) instancesRespondToSelector: selector

does an object created by this class have the ability to respond to the specified selector 此对象是否是由有能力响应指定 selector 的对象所产生

-(id) performSelector: selector

invoke the specified selector on the object 唤起此对象的指定 selector

 

10  Category 类目

Category提供一种为某个类添加方法而又不必编写子类的途径。

比如 有一个类MyClass,现在我又想再加个add方法在里面,

 

@interface MyClass(Math)

§ -(MyClass*) add: (MyClass*) f;

@end

 就没有用继承了。

如果你新加的函数和类之前的函数同名,那么在[object method]的时候,优先调用类本身以前的方法

 

注:如果interface的方法,和

implementation的方法都在.m文件中  那么这个方法就相当于是private了,因为interface不在.h中,那么别的文件也就import不到了,就相当于是private了

 

11 Posing 扮演

 

Posing有点像 categories,但是不太一样。它允许你扩充一个 class,并且全面性地的扮演(pose)这个 super class。例如:你有一个扩充 NSArray 的 NSArrayChild 物件。如果你让 NSArrayChild 扮演 NSArray,则在你的程序代码中所有的 NSArray 都会自动被替代为 NSArrayChild。

 

12 Protocols 协议

 

Objective-C里的 Protocol与 Java 的 interface 或是C++ 的 purely virtual class 相同。

 

 

@protocol Printing

§ -(void) print;

@end

 

 

@interface Fraction: NSObject <Printing, NSCopying> {

§ int numerator;

§ int denominator;

§ }

 

 

 

就像使用@selector来测试对象的继承关系,你可以使用 @protocol 来测试对象是否遵从接口。如果对象遵从这个接口,[object conformsToProtocol: @protocol( SomeProtocol )] 会回传一个 YES 型态的 BOOL 对象。同样地,对 class 而言也能如法炮制 [SomeClass conformsToProtocol:@protocol( SomeProtocol )]。

 

 

13 内存管理

Retain and Release

引用计数

[frac1 retainCount]   查看

 

[frac1 retainCount]  加1

 

[frac1 release];  减1

当retainCount减到0时,就自动调用dealloc ,销毁自己

 

Autorelease Pool

千万记得,要有良好的内存管理,像 [NSStringstringWithString: @"String"] 这种 method 使用了 autorelease pool,而 alloc method 如 [[NSString alloc]initWithString: @"String"] 则没有使用 auto release pool。

 

Autorelease好处,就是调用一次,就可以不管它了(调用的时候,当然没有被release掉),知道最后[pool release],那个时候,就会把这些该release的release掉了

14 Foundation framework classes   框架(c++的模板)

 

Foundationframework 地位如同 C++ 的 Standard Template Library。不过 Objective-C 是真正的动态识别语言(dynamic types),所以不需要像 C++ 那样肥得可怕的样版(templates)。这个 framework 包含了对象组、网络、线程,还有更多好东西。

 

NSArray

 

NSArray跟 NSMutableArray,顾名思义,mutable(善变的)表示可以被改变,而 NSArray 则不行。这表示你可以制造一个 NSArray 但却不能改变它的长度。

 

 

NSArray *arr = [[NSArray alloc] initWithObjects:

§ @"Me",@"Myself", @"I", nil];    nil是结尾符号

 

 

 

[[objdescription] cString]

 

descriptionmethod。它就像 Java 的 toString,会回传对象的 NSString 表示法。

 

NSDictionary   有点像map

15 优点与缺点

优点

§ Cateogies

§ Posing

§ 动态识别

§ 指标计算

§ 弹性讯息传递

§ 不是一个过度复杂的 C 衍生语言

§ 可透过 Objective-C++ 与 C++ 结合

 

o 缺点

§ 不支持命名空间

§ 不支持运算符多载(虽然这常常被视为一个优点,不过正确地使用运算符多载可以降低程序代码复杂度)

§ 语言里仍然有些讨厌的东西,不过不比 C++ 多

 

0 0
原创粉丝点击