Obj-c面向对象

来源:互联网 发布:2016最新网络流行句子 编辑:程序博客网 时间:2024/04/29 19:51
类的定义:
          //类变量
          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
               对象想序列化需实现该协议



原创粉丝点击