在可能会抛出异常的代码块用@try标记(二)

2014-11-24 01:35:49 · 作者: · 浏览: 6
entation Singleton
@synthesize name, age;

static Singleton *singleton = nil;

// 单例的主要方法
+(Singleton *)getSingleton{
if (singleton == nil) {
singleton = [[super allocWithZone:NULL]init];
}
return singleton;
}

+(id)allocWithZone:(NSZone *)zone{
return [[self getSingleton] retain]; // 返回单例
}

-(id)copyWithZone:(NSZone *)zone{
return self;
}

-(id)retain{
return self;
}

-(NSUInteger)retainCount{
return NSUIntegerMax;
}

-(void)release{

}

-(id)autorelease{
return self;
}

@end

int main(int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

Singleton *singleton = [Singleton getSingleton];
[singleton setName:@"zengraoli"];
[singleton setAge:36];
NSLog(@"name : %@, age is : %i", [singleton name], [singleton age]);

Singleton *singleton2 = [Singleton getSingleton];
NSLog(@"name : %@, age is : %i", [singleton2 name], [singleton2 age]);

[pool release];
return 0;
}


继承:
这里只需要注意方法重写和重载就行,不过这又和C++的差不多了

重写:
返回值、方法名、类型、参数类型、参数个数都相同
重载:
1、方法名相同

2、方法名的参数表必须不同,包括参数的类型和个数,以此区分不同的方法体

3、方法的返回类型、修饰符可以相同,也可以不同

OC没有像java那样,所谓的abstract类

id类型的使用,主要是可以取代*,和指针的使用差不多

[cpp]
//
// main.m
// test
//
// Created by Zeng on 13-5-24.
// Copyright (c) 2013年 zeng. All rights reserved.
//

#import
#import "YourClub.h"
#import "Membership.h"
#import "MyClass.h"


int main(int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

id idMyClass;
MyClass *class1 = [[MyClass alloc] init];
[class1 setName:@"zengraoli1" andSetTheAge:36];
MyClass *class2 = [[MyClass alloc] init];
[class2 setName:@"zengraoli2" andSetTheAge:63];

idMyClass = class1;
NSLog(@"name : %@, age : %i", [idMyClass name], [idMyClass age]);

idMyClass = class2;
NSLog(@"name : %@, age : %i", [idMyClass name], [idMyClass age]);

[class1 release];
[class2 release];
[pool release];
return 0;
}

//
// main.m
// test
//
// Created by Zeng on 13-5-24.
// Copyright (c) 2013年 zeng. All rights reserved.
//

#import
#import "YourClub.h"
#import "Membership.h"
#import "MyClass.h"


int main(int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

id idMyClass;
MyClass *class1 = [[MyClass alloc] init];
[class1 setName:@"zengraoli1" andSetTheAge:36];
MyClass *class2 = [[MyClass alloc] init];
[class2 setName:@"zengraoli2" andSetTheAge:63];

idMyClass = class1;
NSLog(@"name : %@, age : %i", [idMyClass name], [idMyClass age]);

idMyClass = class2;
NSLog(@"name : %@, age : %i", [idMyClass name], [idMyClass age]);

[class1 release];
[class2 release];
[pool release];
return 0;
}


category(类别)
category是OC里面最常用到的功能之一。category可以为已经存在的类增加方法,而不需要增加一个子类。另外,category使得我们在不知道某个类的内部实现的情况下,为该类增加方法。

如果我们想增加某个框架(framewordk)中的类的方法,category就非常有效。比如,如果想在NSString上增加一个方法来判断它是否是一个URL,那可以这么做:

[cpp]
#import
@interface NSString (Utilities)
- (BOOL) isURL
@end

#import
@interface NSString (Utilities)
- (BOOL) isURL
@end


P156、P157试一个使用category的例子

注意,类别并不能为类声明新的实例变量,它只包含方法。

NSStringUtiities.h

[cpp]
//
// NSStringUtiities.h
// test
//
// Created by Dawn on 13-5-27.
// Copyright (c) 2013年 zeng. All rights reserved.
//

#import
#import "Coc