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

2014-11-24 01:35:49 · 作者: · 浏览: 9

协议 protocal
暂时忽略这个,因为我觉得在C++中,多重继承都不是太常用P124

异常处理
在可能会抛出异常的代码块用@try标记

@catch指令标记的代码块,用于捕捉@try语句块中的抛出的错误

@finally语句块中包含的代码是不论程序是否抛出异常都会执行的代码

可以使用@throw自己抛出一个错误,这个错误一般熟NSException类的对象

试个例子P130

[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];

MyClass *class1 = [[MyClass alloc] init];

@try {
[class1 release];
}
@catch (NSException *exception) {
NSLog(@"Caught %@ %i", [class1 name], [class1 age]);
}
@finally {
NSLog(@"OK");
}

[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];

MyClass *class1 = [[MyClass alloc] init];

@try {
[class1 release];
}
@catch (NSException *exception) {
NSLog(@"Caught %@ %i", [class1 name], [class1 age]);
}
@finally {
NSLog(@"OK");
}

[pool release];
return 0;
}


回忆一个指针的类型和指针所指向的类型
int *prt;//指针的类型是int*

int **prt;//指针的类型是int**

int (*ptr)[3]//指针的类型是int(*)[3]

int *(* ptr)[4]//指针的类型是int*(*)[4]

从语法上看,只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型,例如上面的:

int *prt;//指针的类型是int

int **prt;//指针的类型是int*

int (*ptr)[3]//指针的类型是int()[3]

int *(* ptr)[4]//指针的类型是int*()[4]

从上面可以看出,指针的类型(即指针本身的类型)和指针所指向的类型是两个概念

线程暂时没用到,先不做学习,等用到的时候在回来看P134

单例模式,P135,挺好的一种设计模式,能在例子中学习到静态方法+

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

#import

@interface Singleton : NSObject{
NSString *name;
int age;
}
@property(nonatomic, copy) NSString *name;
@property int age;

@end

@implementation 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;
}

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

#import

@interface Singleton : NSObject{
NSString *name;
int age;
}
@property(nonatomic, copy) NSString *name;
@property int age;

@end

@implem