• [置顶] Objective-C ,/,ios,/iphone开发基础:协议(protocol)


    protocol协议时为了补充Objective-C 只能单继承的缺陷而增加的一个新功能。Objective-C重所有的方法都是虚方法,所以在oc重也就没有关键字 virtual一说,有了协议可以补充

    Objective-C单继承的缺陷,协议并不是一个真正的类,在协议的里面只声明方法不实现,并且在协议当中不能声明实例变量,如果一个类实现了某一个协议的方法,那么称折各类遵

    循(遵守,采用)了这个协议,正式的协议在类中必须被实现,一个类可以实现多个协议,一个协议也可以被多个类实现

    格式 format:

    @protocol protocol_name<protocol,....>

       required_Method_Declarations //默认是required  在类中必须被实现

    @optional

       optional_Method_Declarations // 在类中可以选择性的实现,

    @required

       required_Method_Declarations  //在类中必须被实现,

    @end

    //  MyPoint.h
    
    #import <Foundation/Foundation.h>
    //xieyi 协议 protocol
    @protocol showOn
    @required 
    -(void)printOn;
    @end
    // lei
    @interface MyPoint : NSObject<showOn,NSCopying>{
        int x;
        int y;
    }
    @property (nonatomic,assign)int x,y;
    -(id)initWithX:(int)_x andY:(int)_y;
    @end
    // leibie fenlei category 分类
    @interface MyPoint(MoveSet)
    
    -(void)moveToX:(int)_x andY:(int)_y;
    
    
    @end
    

     

    //  MyPoint.m
    
    #import "MyPoint.h"
    
    @implementation MyPoint
    @synthesize x,y;
    -(id)initWithX:(int)_x andY:(int)_y{
        if(_x==0)
            x=1;
        if(_y==0)
            y=1;
        x=_x;
        y=_y;
        return self;
    }
    //copyWithZone 方法,避免浅拷贝 
    -(id)copyWithZone:(NSZone *)zone{
        MyPoint* newPoint=[[MyPoint allocWithZone:zone] initWithX:x andY:y];
        return newPoint;
    }
    -(void)printOn{
        NSLog(@" x = %d , y = %d ",x,y);
    }
    @end
    @implementation MyPoint(MoveSet)
    -(void)moveToX:(int)_x andY:(int)_y{
        x=_x;
        y=_y;
    }
    @end
    

     

    //  Circle.h
    
    #import <Foundation/Foundation.h>
    #import "MyPoint.h"
    
    @interface Circle : NSObject<showOn>{
        MyPoint* point;
        int radius;
    }
    @property (nonatomic,copy)MyPoint* point;
    @property (nonatomic,assign)int radius;
    -(id)initWithPoint:(MyPoint* )_p andRadius:(int)_r;
    -(id)initWithPoint:(MyPoint *)_p ;
    @end
    

     

    //  Circle.m
    
    #import "Circle.h"
    
    @implementation Circle
    @synthesize point;
    @synthesize radius;
    //重写初始化方法
    -(id)initWithPoint:(MyPoint *)_p andRadius:(int)_r{
        if(_r==0)
        {
            radius=1;
        }
        if(_p==nil)
            return nil;
        if(self=[super init])
        {
            if(point!=_p)
            {
                if(point)
                    [point release];
                point =[[MyPoint alloc]initWithX:_p.x andY:_p.y];
            }
            
        }
            radius=_r;
            return self;
    }
     //重写初始化方法,
    -(id)initWithPoint:(MyPoint*)_p{
        self=[self initWithPoint:_p andRadius:10];
        return self;
    }
    //实现协议中的方法。
    -(void)printOn{
        NSLog(@"point(x,y) = (%d,%d),radius = %d",point.x,point.y,radius);     
    }
    @end
    

     

  • 相关阅读:
    NSArray和NSMutableArray
    NSString和NSMutableString
    关于self指针
    匆匆这一年
    8步共振项目管理体系(8):项目实施过程中的辅助规范
    8步共振项目管理体系(7):项目实施过程的基本规范
    8步共振项目管理体系(5):项目管理的组织及制度保证
    8步共振项目管理体系(2):实施项目成功的标准和必要条件
    8步共振项目管理体系(3):实施顾问和项目经理的素质要求
    8步共振项目管理体系(6):健康的企业文化、团队文化
  • 原文地址:https://www.cnblogs.com/riskyer/p/3270976.html
Copyright © 2020-2023  润新知