Categorynbsp;Protocolnbsp;Exte…
{
NSString *_name;
NSInteger _age;
//添加新实例变量
NSString *_sex;
}
- (void)sayHi;
//给类添加新方法
//建议以后写延展都是用这种方式
//延展方便我们管理一个类的私有方法和实例变量
@interface Person ()
{
//延展的实现部分
//给类添加新方法
- (void)sayHello{
NSLog(@"Hello 包小姐!");
//调用延展里声明的方法
[self dance];
}
Person *p = [[Person alloc]init];
[p sayHi];
//1.新建文件 command + n
//2.选择Object-c File模板
//3.File栏根据扩展的功能写入文件名
//4.中间栏选择Category
//5.Class选项写入对那个类的扩充,就写入那个类的类名
//6.next之后会自动生成一对“类名 + 扩展名.h”和“类型加扩展名.m”文件
//(分类名)
@interface Person (Study)
{
// NSString *_color; error!!!实例变量不能定义到分类中
}
//分类不仅可以添加类方法也可以添加对象方法
//类方法
+ (void)study;
//对象方法
- (void)study;
- (void)sayHi;
//类方法
+ (void)study{
NSLog(@"学习LOL包小姐");
}
//对象方法
- (void)study{
NSLog(@"学习CF包小姐");
}
- (void)sayHi{
NSLog(@"你好,苹果");
}
{
NSInteger _number;
}
//不正式添加分类的方法
- (void)study{
NSLog(@"努力学习包小姐");
}
@end
@implementation Student (hitPlan)
//分类的实现 这种方式只适合能看到源文件的类
- (void)hitPlan{
NSLog(@"打飞机");
}
Person *p2 = [[Person alloc]init];
[Person study];
[p2 study];
//如果分类中定义和原始中一样的方法,此时优先选择执行分类中的方法
- (void)sayHi;
//拼接字符串的方法
- (NSString *)appendingString : (NSString *)string;
- (void)sayHi{
NSLog(@"你好 我是5号");
}
//拼接字符串的方法
- (NSString *)appendingString : (NSString *)string{
return [string stringByAppendingString:@"约嘛?"];
}
NSString *s = [NSString string];
[s sayHi];
NSString *newString = [s appendingString:@"罗玉凤"];
+ (NSDate *)dateWithDateString : (NSString *)dateString;
+ (NSDate *)dateWithDateString : (NSString *)dateString{
//日期格式对象
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
//指定格式
[formatter setDateFormat:@"yyyyMMddHHmmss"];
NSDate *date1 = [formatter dateFromString:dateString];
return [date1 dateByAddingTimeInterval:8 *60 *60];
}
NSString *dateString = @"20150907160230";
NSDate *date = [NSDate dateWithDateString:dateString];
2.延展中的方法和实例变量都是私有的,不能直接访问,分类中的方法外界可以访问
3.延展针对是已知类(因为它的实现只能在这个类的.m文件中写),分类中可以为不知道源文件的类添加方法;
2.找代理,遵循协议
3.成为代理
4.执行协议中的方法
=============制定协议的步骤:==============
1.Command + n 新建文件
2.文件名(类名 + delegate) eg: PersonDelegate
3.中间栏选Protocal
4.Class 哪个类指定的协议就写那个类
5.只生成.h文件
_isTrue = YES;
if (_isTrue) {
//延展中的私有方法
[self eatBone];
NSLog(@"躺着吃");
}else{
}
{
NSLog(@"你去找别人把");
{
{
BOOL _isTrue;
}
- (void)eatBone;//吃骨头
[d eatShit];
@interface Girl : NSObject
{
//设置一个男朋友的属性
//此时这个实例变量必须遵循协议 <协议名称>
//遵循协议符号 <协议名称>
id <</span>GirlDelegate>_boyFriend;
NSString *_name;
}
- (void)setName : (NSString *)name;
- (NSString *)name;
//写setter getter方法
- (void)setBoyFriend : (id<</span>GirlDelegate>)boyFriend;
- (id<</span>GirlDelegate>)boyFriend;
- (void)wangShopping;
- (void)wantHappy;
- (void)wantFun;
- (void)wantEating;
- (void)setName: (NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
- (void)setBoyFriend : (id<</span>GirlDelegate>)boyFriend{
_boyFriend = boyFriend;
}
- (id<</span>GirlDelegate>)boyFriend{
return _boyFriend;
}
- (void)wangShopping{
NSLog(@"出去卖切糕");
}
}
- (void)wantHappy{
if ([_boyFriend respondsToSelector:@selector(wellDone)]) {
[_boyFriend wellDone];
}else{
NSLog(@"换人");
}
}
- (void)wantEating{
//如果代理没有执行协议中的方法,此时加了这个判断就不会造成crash
if ([_boyFriend respondsToSelector:@selector(cook)]) {
[_boyFriend cook];
}else{
NSLog(@"自己做着吃");
}
}
- (void)wantFun{
[_boyFriend cook];
}
@required
//required 修饰协议的内容是必须实现的
//能挣钱
- (void)makeMoney;
//能干
- (void)wellDone;
@optional
//optional 修饰协议 可选择实现的
//做饭
- (void)cook;
//幽默
- (void)humorous;
//一个类要想成为代理必须遵循协议, 协议的位置写在其父类的后面,使用一对尖括号<>
@interface Boy : NSObject<</span>GirlDelegate>
{
NSString *_name;
}
- (void)setName : (NSString *)name;
- (NSString *)name;
- (void)setName : (NSString *)name{
_name = name;
}
- (NSString *)name{
return _name;
}
//实现协议中必须实现的方法
- (void)makeMoney
{
NSLog(@"一百万够不够花");
}
- (void)wellDone
{
NSLog(@"一瓶伟哥够不");
}
//实现协议中可选的方法
- (void)cook
{
NSLog(@"小鸡炖蘑菇");
}
- (void)humorous
{
NSLog(@"你看我长得像不像周润发?");
}
Girl *g = [[Girl alloc]init];
g.name = @"小樱";
//于是它定义一个协议,心想,谁能完成协议,我当他女朋友
//此时25岁小军,下决定脱单,看到网上征婚协议
//一天后,鼓起勇气,小军看到协议,又摸了摸钱包,一咬牙签了
Boy *b = [[Boy alloc]init];
b.name = @"小军";
//签了协议就能成为小樱的男朋友
g.boyFriend = b;
//我想吃购物
[g wangShopping];
//我想幸福
[g wantHappy];
//我想开森
[g wantFun];
g.boyFriend = d1;
[g wantHappy];
Categorynbsp;Protocolnbsp;Exte…相关推荐
- PHP Warning: PHP Startup: Unable to load dynamic library ‘bz2‘ (tried: /usr/local/php8/lib/php/exte
PHP安装,创建完软连接,第一次使用 php -m查看扩展正常 但是在调用软连接:php -v 或者 php -m 会出现以下错误 PHP Warning: PHP Startup: Unable t ...
- php绘图技术加水印,PHP图片添加水印功能示例小结
本文实例总结了PHP图片添加水印功能.分享给大家供大家参考,具体如下: 例1.很简单图下添加水印函数 /** * 追加水印 * * @param string $source_img 原始图片url ...
- 部署laravel项目
1 先登录到服务器上,将代码克隆下来 git clone 项目地址 2 避免composer太慢,启用本镜像服务 可以先安装 apt-get install zip,unzip,php7.0-zip ...
- matlab的基础使用
我本意并不想搞matlab的,但是代码中涉及一部分使用matlab写的,只能学习一下和这段代码相关的语法啦 input_folder = 'GT';kerneltype = {'g','m','d'} ...
- [译]使用 Rust 开发一个简单的 Web 应用,第 4 部分 —— CLI 选项解析
原文地址:A Simple Web App in Rust, Part 4 -- CLI Option Parsing 原文作者:Joel's Journal 译文出自:掘金翻译计划 本文永久链接:g ...
- 大数据学习笔记1000条
1.Zookeeper用于集群主备切换. 2.YARN让集群具备更好的扩展性. 3.Spark没有存储能力. 4.Spark的Master负责集群的资源管理,Slave用于执行计算任务. 5.Hado ...
- 元对象我所理解的设计模式(C++实现)——享元模式(Flyweight Pattern)
这段时间个人几篇文章介绍了改元对象的文章. 关联文章的地址 概述 想想我们编辑文档用的wps,文档里文字很多都是重复的,我们弗成能为每个涌现的汉字都创建独立的空间,这样代价太大,最好的方法就是同享其中 ...
- python list删除元素_python中List添加、删除元素的几种方法
原博文 2015-06-21 18:51 − 一.python中List添加元素的几种方法 List 是 Python 中常用的数据类型,它一个有序集合,即其中的元素始终保持着初始时的定义的顺序(除非 ...
- oracle为什么要创建数据库,手动创建Oracle数据库之前因后果
对于许多数据库管理员来说,究 竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题.如果你想通过一个应用程序操 控使用这个数据库,那么你 ...
最新文章
- Java 对象锁和类锁全面解析
- DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测
- 智能家居 (8) ——智能家居项目整合(网络控制线程、语音控制线程,火灾报警线程)
- 零基础Python知识点回顾(一)
- 17-取石子-hdu1846(巴什博奕)
- iOS之instancetype
- 【LuoguP5004】 专心OI - 跳房子
- 生活杂记 - 丢东西
- winpythonhadoop_win10下配置hadoop2.9(使用python单机运行任务)
- java执行查询postgresql得到中文乱码_PostgreSQL 初探
- 克隆硬盘后进不去系统_硬盘克隆后重启找不到操作系统所在分区问题解决
- php mysql电子_用php与mysql的电子贺卡代码
- hdu4565 so easy 矩阵
- 百度指数爬取+pyppeteer登录(解决旋转验证码)
- 大泡沫.一切从广场协议开始 俞天任 读后总结
- 再生龙备份还原linux系统
- 广域网技术-PPP协议
- 华为FPGA设计设计规范
- 计算机游戏的最新技术,搭载十代酷睿i7处理器 这台ROG冰刃4新锐拥有媲美台式游戏电脑的性能...
- 什么是CAS简单介绍
热门文章
- 如何用c语言编辑盗号,想程序高手求助--用C语言来编辑一个输入密码的程序
- bluetooth射频已关闭请打开bluetooth射频_【富满电子*王平阳】射频IC布局落地,打开全新成长空间...
- tp框架融入短信发送和验证
- 。集线器端口上出现电涌是怎么回事
- 2015各大公司面经(搜狐+搜狗+人人等互联网公司)+招聘技巧
- python画鞭炮_Python实践|憨憨炸鞭炮
- BDP 650/665偶联alkyne炔烃/MAl马来酰亚胺/N3叠氮/DBCO/NHS酯/COOH羧基/四嗪/酰胫
- cdh用户权限_CDH用户管理
- Web实战:如何进行视频截图
- SSL/TLS学习-ECDHE