protocol小解(二)

本文介绍了如何使用协议来限制对象类型,确保对象必须遵循特定的MyProtocol协议。通过示例展示了如何声明和使用遵循协议的变量,并强调了在声明属性和遵守协议时的注意事项,包括在头文件中使用`@protocol`预声明和在实现文件中导入协议。

制对象类型:

让类遵循某个协议,对使用的对象进行限制

//
//  LMC.h
//  OCStudy
//
//  Created by LiuMingchuan on 15/9/27.
//  Copyright © 2015年 LMC. All rights reserved.
//

#import "Person.h"
#import "MyProtocol.h"

@interface LMC : Person <MyProtocol>

@property (nonatomic,assign)int age;

@end
LMC遵从MyProtocol协议

<pre name="code" class="objc">        NSObject<MyProtocol> *object0 = [[NSObject alloc]init];
        NSLog(@"%@",object0);
        
        NSObject<MyProtocol> *object1 = [[LMC alloc]init];
        NSLog(@"%@",object1);
        
        id<MyProtocol> object3 = [[LMC alloc]init];//id相当于 NSObject*,所以object3不加*
        NSLog(@"%@",object3);
 


我们想要的对象必须遵从MyProtocol协议,当对象生成中类没有遵从MyProtocol协议,就会出现上面黄色的警告!因为我们的指针变量object0、object1、object2都是要指向遵从了MyProtocol协议的对象。

如果我们要定义一个指针变量,指向一个是某一类型(或者继承某类)并且遵循某个协议

我们可以这么写 类型的类<遵循的协议> *变量名

例如:

        Person<MyProtocol> *lmc = [[LMC alloc]init];
        NSLog(@"%@",lmc);
Person是LMC的父类,并且LMC遵循了MyProtocol协议

既然我们在生命对象的时候能使用上边的方法进行对象的类型,当我们在声明属性的时候,当然也可以

比如

@property (nonatomic,strong)id<MyProtocol> object1;
@property (nonatomic,strong)NSObject<MyProtocol> *object2;
@property (nonatomic,strong)Person<MyProtocol> *person;

协议的提前声明:

在前几天写的文章中有关于#import循环引用的【#import循环引用:一  循环引用

因为我们在使用协议的时候也需要引入协议类头文件

所以我们也需要在遵守协议的类的头文件【.h】中使用@protocol的形式提前声明协议,当我们在遵守协议的类的实现文件【.m】中实现协议的时候我们在使用#import导入协议文件

协议的定义位置:

协议既可以定义为【.h】文件,也可以定义在类中;

1》如果协议被很多类遵守,我们应该声明为【.h】文件

2》如果协议只是被某个类遵循,我们可以生命在一个类中


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值