码迷,mamicode.com
首页 > 其他好文 > 详细

OC协议的简单理解

时间:2014-08-18 10:26:23      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   strong   文件   div   代码   

新建一个工程,工程里面有Person, dog,blackman三个类,person需要找个人来帮他盖房子。

分析:dog是动物,肯定不会造房子,blakman,或许可以建房子,那程序如何判断blackman,dog能否建房子?那我们就需要一个东西来限定/指定他们的属性,这就是协议咯,协议在我看来就是一个可以限定/指定一些对象属性的东西,所以现在我们现在新建一个名为delegate的类

@protocol onedelegate <NSObject>
//创建一个协议
@required
//required下面的方法得实现,不然会报错
-(void)nengGaiFangzi;
//定义“能盖房子”的这么个方法
@end

给blackman挂上协议,并实现协议中定义的方法,说明blackman具有盖房子这个属性,协议挂在@interface后面

#import <Foundation/Foundation.h>

#import "delegate.h"
@interface BlackMan : NSObject <onedelegate>

 

#import "BlackMan.h"

@implementation BlackMan
- (void)nengGaiFangzi
{

}

- (int)call:(NSString *)name
{
    NSLog(@"%@", name);
    
    return 123;
}
@end

在person的头文件加入如下代码

#import <Foundation/Foundation.h>

#import "delegate.h"
#import "BlackMan.h"

@interface person : NSObject
@property (nonatomic, weak) id<onedelegate> delegate;//定义一个person的属性,该属性必须实现了onedelegate这个方法
@property (nonatomic, strong) BlackMan *man;

- (void)print;
@end

在viewcontrller实现我们找人盖房子的功能

#import "ViewController.h"

#import "person.h"
#import "Dog.h"
#import "BlackMan.h"

@interface ViewController ()
{
    
}

@end

@implementation ViewController
            
- (void)viewDidLoad {
    [super viewDidLoad];
    
   person *p = [[person alloc] init];//先定义一个对象,才能调用属性
//    
//    Dog *dog = [[Dog alloc] init];//可以初始化
//
//    p.delegate = dog;//因为DOG类没加我们的协议,它不具备盖房子属性,更没盖房子的方法,而delegate属性必须实现协议,协议里有盖房子的方法,这个代码肯定报错,
    
    BlackMan *man = [[BlackMan alloc] init];
    p.delegate = man;
    [p.delegate nengGaiFangzi];
    
//    p.man = man;
    [p print];

 

OC协议的简单理解,布布扣,bubuko.com

OC协议的简单理解

标签:style   blog   color   io   strong   文件   div   代码   

原文地址:http://www.cnblogs.com/yang-sir/p/3918778.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!