15-02-28-协议[email protected] 接口

//

//  main.m

//  05-protoco

//

//  Created by apple on 13-8-11.

//  Copyright (c) 2013年 itcast. All rights reserved.

//

/*

1.协议的定义

@protocol 协议名称 <NSObject>

// 方法声明列表....

@end

2.如何遵守协议

1> 类遵守协议

@interface 类名 : 父类名 <协议名称1, 协议名称2>

@end

2> 协议遵守协议

@protocol 协议名称 <其他协议名称1, 其他协议名称2>

@end

3.协议中方法声明的关键字

1> @required (默认)

要求实现,如果没有实现,会发出警告

2> @optional

不要求实现,怎样不会有警告

4.定义一个变量的时候,限制这个变量保存的对象遵守某个协议

类名<协议名称> *变量名;

id<协议名称> 变量名;

NSObject<MyProtocol> *obj;

id<MyProtocol> obj2;

如果没有遵守对应的协议,编译器会警告

[email protected]中声明的属性也可用做一个遵守协议的限制

@property (nonatomic, strong) 类名<协议名称> *属性名;

@property (nonatomic, strong) id<协议名称> 属性名;

@property (nonatomic, strong) Dog<MyProtocol> *dog;

@property (nonatomic, strong) id<MyProtocol> dog2;

6.协议可用定义在单独.h文件中,也可用定义在某个类中

1> 如果这个协议只用在某个类中,应该把协议定义在该类中

2> 如果这个协议用在很多类中,就应该定义在单独文件中

7.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

1> 一般情况下,都是定义在单独文件

2> 定义在原来类中的分类,只要求能看懂语法

*/

#import <Foundation/Foundation.h>

#import "MyProtocol.h"

#import "MyProtocol3.h"

#import "Person.h"

#import "Dog.h"

#import "Hashiqi.h"

int main()

{

Person *p = [[Person alloc] init];

p.obj = [[Hashiqi alloc] init];

return 0;

}

void test()

{

//NSObject *obj = [[NSObject alloc] init];

//NSObject *obj2 = @"4324324";

// 要求obj3保存的对象必须是遵守是MyProtocol这个协议

//NSObject<MyProtocol> *obj3 = [[NSObject alloc] init];

NSObject<MyProtocol> *obj3 = [[Person alloc] init];

obj3 = nil;

id<MyProtocol> obj4 = [[Person alloc] init];

obj4 = nil;

// 要求obj5,保存的对象必须遵守MyProtocol3、并且继承了Person

Person<MyProtocol3> *obj5 = [[Person alloc] init];

obj5 = nil;

}

时间: 2024-12-22 22:04:41

15-02-28-协议[email protected] 接口的相关文章

Appium [email&#160;protected]~15.3.1 编辑记录

\ npm install -save [email protected]~15.3.1 npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules/appium/node_modules/[email protected]@appium-xcuitest-driver/node_modules [email protected] /usr/local/lib/node_modules/appium/

Attribute meta-data#[email&#160;protected] value=(25.4.0) from AndroidManifest.xml:25:13-35 is also present at AndroidManifest.xml:28:13-35 value=(26.1.0).

Android Studio 编译项目的时候报错 Merging Errors: Error: Attribute meta-data#[email protected] value=(25.4.0) from AndroidManifest.xml:25:13-35 is also present at AndroidManifest.xml:28:13-35 value=(26.1.0). Suggestion: add 'tools:replace="android:value"

【[email&#160;protected]基础篇 ~】# 磁盘与文件系统

之前三篇文章我们简单介绍了Linux系统的用户管理,文件操作等,都是比较浅显的基本操作.这节我们要深入一下了,从文件系统我们要看到磁盘系统.从磁盘系统我们要看到操作系统的整体架构.废话不多少让我们开始学习吧! 磁盘与文件系统 1.磁盘系统 1.1 磁盘结构 如图所示,磁盘由扇区和柱面组成,分区的最小单位是柱面(柱是有厚度的,本图是截面图),磁盘读取的最小单位是扇区.第一扇区的MBR(446bytes)分区表可以最大包含四个分区(64bytes)的信息,即从开始柱面到结束柱面4组数据,每组16个字

Spring框架[email&#160;protected]

使用@Resource注解,实现组件装配,默认按照名称匹配. 下面的类都是使用到注解的类: 1 package dao.impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import dao.UserDao; 6 import entity.User; 7 8 /** 9 * 用户DAO类,实现IDao接口,负责User类的持久化操作 10 */ 11 @Repository("userDao") 12 pu

[email&#160;protected]一个高效的配置管理工具--Ansible configure management--翻译(六)

无书面许可请勿转载 高级playbook Finding files with variables All modules can take variables as part of their arguments by dereferencing them with {{ and }} . You can use this to load a particular file based on a variable. For example, you might want to select a

linux shell变量$#,[email&#160;protected],$0,$1,$2的含义解释

变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表. 所有的参数被认为是一个字符串[email protected] 所有参数列表.参数是独立的字符串$# 添加到Shell的参数个数 $0 Shell本身的文件名 $1-$n 添加到Shell的各参数值.$1是第1个参数.$2是第2个参数…. 通过一个脚本,来看看各个变量的效果 1

[email&#160;protected] Apple HomeKit

[email protected]采用基于IEEE802.15.4标准的低功耗个域网协议的ZigBee技术,其是低功耗.低成本及低延迟.标准功率下可满足100米范围内的信号覆盖,并拥有三级安全模式,防止非法获取数据. http://smartgrids.ofweek.com/2013-05/ART-290001-8130-28686110.html 苹果对应的HomeKit 苹果HomeKit如何牵动全国智能硬件格局 http://www.cocoachina.com/newbie/basic/

Shell特殊变量:Shell $0, $#, $*, [email&#160;protected], $?, $$和命令行参数

变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数的所有参数.被

======= 利用源码安装的tar包,免安装--MySQL-5.6.23 for [email&#160;protected]

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/44836547 一.在源码安装的基础上:我打了一个tar包:cd /u01/myss06tar cvzf my3306.tar . 二.关闭防火墙chkconfig iptables off service iptables stop vi /etc/selinux/configSELINUX=disabled 三.检查操作系统上是否安装了MySQL[[email protected] b