限制对象类型:
让类遵循某个协议,对使用的对象进行限制
//
// 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》如果协议只是被某个类遵循,我们可以生命在一个类中
本文介绍了如何使用协议来限制对象类型,确保对象必须遵循特定的MyProtocol协议。通过示例展示了如何声明和使用遵循协议的变量,并强调了在声明属性和遵守协议时的注意事项,包括在头文件中使用`@protocol`预声明和在实现文件中导入协议。
1495

被折叠的 条评论
为什么被折叠?



