posts - 20,comments - 15,trackbacks - 0

VC to Object-C

本博客所有文章均为原创, 谢绝转载

1. Class
// 类声明
@interface MyTest : NSObject
{
// @private 私有, @package 
 int num1;
 int num2;
}

// 属性
@porperty int num1, num2;

// 类方法
-(void) print;
-(int) Test2;

// 多参数函数
// 方法称为setTo:set2:, 其实就是void setTo_set2(int a, int b);
// Object-C和C++比更象一种描述语言
// 调用[mytest setTo : 1 set2 : 3];
-(void) setTo : (int) a set2: (int) b
{
 num1 = a;
 num2 = b;
}

// 类似于vc里的static void print2();
// 调用[MyTest print2];  同CMyTest::print2();
+(void) print2;
@end

// 类实现
@implementation MyTest

// 编译器会自动生成类似get,put的方法
// 不用@porperty, 需要自己现实现属性数据的读写
@synthesize num1, num2;

-(void) print
{
 // 输出到调试区, 类似OutputString
 NSLog(@"%i/%i", num1, num2);
}

-(int) Test2
{
 return 10;
}
@end


// 调用
MyTest* p = [[MyTest alloc] init]; // init是NSObject的方法, 类似C++里的构造, 不过oc只能用指针
[p setTo : 1 set2 : 3];
[p print];
[p release];

// 输出
1/3


2. 带分类的类, 分类就是提供一个方法组合
//1. 分类不能建变量
//2. 最好不要重载主类的方法
//3. 可以不实现分类的全部方法
@interface MyTest (MyTestEx)  // 括号里的MyTestEx作为MyTest类的分类
-(int) add : (int) a;
-(int) sub : (int) a;
@end


@implementation MyTest (MyTestEx)
-(int) add : (int) a
{
 num1 += a;
}
-(int) sub : (int) a
{
 num1 -= a;
}
@end

// 调用
MyTest* p = [[MyTest alloc] init]; 
[p setTo : 1 set2 : 3];
[p add : 1];
[p print];
[p release];

// 输出
2/3


3. 协议
协议是多个类共享一个方法列表。 就有点象C++里的虚函数表
协议只负责声明, 实现由引用类负责

// 这是一个协议声明, 感觉就是vc里的接口声明
// interface NSCopying {
// void* copyWithZone(NSZone* zone) = 0;
// };
@protocol NSCopying
-(id)copyWithZone: (NSZone*)zone;
@optional // 该关键字后的方法可以不实现
-(void) outline;
@end

// 使用协议, 协议用尖括号包含起来, 放在类名或基类名称之后
// VC里应该是这样class CAddressBook : public CNSObject , public INSCopying {};
@interface AddressBook : NSObject <NSCopying>
@end
// 可以使用多个协议, 就象VC里的多重继承
// class CAddressBook : public CNSObject , public INSCopying , public INSCoding{};
@interface AddressBook : NSObject <NSCopying, NSCoding>
@end


 

posted on 2012-02-11 15:34 wangkang 阅读(448) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理