类的定义:
//类变量
static int count;
@interface Myobject:NSObject{//主要进行成员变量的定义NSString *param;}
//主要进行成员方法的定义(不会有方法的实现)-(void) run:(long) time name:(NSString*) name;//属性(setter,getter的简化)@property(copy,readwrite) NSString *param;
@end
@implementation Myobject
//属性组合@synthesize param;
//方法的实现-(void) run:(long) time name:(NSString*) name{// do something}
@end
消息发送 [myobject run:1098 name:@"Me"]属性访问myobject.param成员变量的访问myobject->param
属性参数说明:![]()
实例构造函数
- (id) init{self = [super init];if(self){//do something}return self;}
类构造函数//类加载时会调用,并且只调用一次+(void) initialize{//do something}
//只有变量具有访问权限修饰符,方法不具有@public随处可以访问@private只有本类可以访问@protected本类和子类可以访问
id是泛类型,可以存放各种类型数据,使用id类型也就是使用"动态类型"id类型是在执行时,动态判断出id类型实际代表的类型,而不是自动的转换成相应的类型
静态类型可以在编译阶段发现错误并且可读性更好id类型具有很好的灵活性,但是在运行阶段才能发现错误,很难控制
分类当需要扩展一个类的功能时可以用分类,另外也可以用继承是一种动态的类型机制,动态绑定机制
@interface NSString(reverse)-(NSString*) reverseString;@end
@implementation NSString(reverse)-(NSString*) reverseString{// do something}@end
协议只负责方法的定义,没有m文件;类似于java中的接口,但协议中没有成员变量定义的方法分为必须实现的方法,和不强制要求实现的方法// 协议@protocol Shape-(void) draw;@end
//协议实现(可以实现多个协议,用逗号分开)@interface Rectangle:NSObject<Shape,...>-(void) draw;@end// m文件中必须实现协议中的方法@implementation Rectangle@required // 必须实现-(void) draw{// do something}@optional //可选@end
//动态类型,区别于java的写法id<Shape> rect = [[Rectangle alloc] init];
两个重要的协议NSCopying对象要进行copy必须实现的协议NSCoding对象想序列化需实现该协议
![]()