首页 > 其他分享 >Objective-C学习笔记(协议和代理)

Objective-C学习笔记(协议和代理)

时间:2024-08-03 17:26:47浏览次数:19  
标签:协议 int 代理 笔记 实现 遵循 Objective Drawing3D 方法

协议

协议是多个类共享的一个方法列。协议中列出的方法没有相应的实现,计划由其他人来实现。可以定义这些方法为必须实现的,也可以为可选择实现的

@protocal 协议名
//在此处添加必须实现的协议方法
@optional
//在此处添加可选择实现的协议方法
@end

遵循协议也符合继承关系。父类遵循了某项协议,则子类也同样遵循
协议不引用任何类,它是无类的。任何类都可以遵循某项协议。

//是否遵循某项协议
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;
//是否实现了某个方法
- (BOOL)respondsToSelector:(SEL)aSelector;

协议也可以扩展

//表明Drawing3D协议也采用了Drawing协议,任何采用Drawing3D协议的类都必须实现此协议列出的方法,以及Drawing协议列出的方法
@protocal Drawing3D <Drawing>

分类也可以采用协议

//Fraction类的分类stuff遵循NSCopying和NSCoding协议
@interface Fraction (stuff)<NSCopying,NSCoding>

如果不想在.h文件中公开声明你的类符合特定协议,可以将协议像分类扩展一样写在.m中

@interface ClassA ()<Drawing>
@end

代理

定义了协议的类,可以看作是,将协议定义的方法代理给了实现它们的类。具体的动作由代理类承担。

合成对象

即一个类包含一个或多个其他类的对象

@interface Square:NSObject
{
	Rectangle *rect;
}

- (int)setSide:(int)s;
- (int)side;
- (int)area;
- (int)perimeter;

预定义的值,本身也可以引用另一个预定义的值

条件编译

Blocks(块)

在block内部无法直接修改block外部定义的变量值。需要在其前面加上修饰符_ _block

NSInteger不是对象,而是基本数据类型(64位的long和32位的int)的typedef

description方法

通过覆写description方法,可以使用格式化字符显示自己的类对象。如果不覆写,NSlog
仅仅显示类名和该对象在内存中的地址。这是从NSobject类继承的description方法的默认实现。

NSValue类,将结构转化为对象(如CGPoint,CGSize)
在这里插入图片描述

标签:协议,int,代理,笔记,实现,遵循,Objective,Drawing3D,方法
From: https://blog.csdn.net/qq_39773151/article/details/140834954

相关文章

  • 【笔记】动态规划选讲:凸优化技术大赏 2024.8.3
    如果您是搜索引擎搜进来的。很抱歉,没有您需要搜索的题目的题解。典题\(n\)个物品的背包,重量在\(1\sim4\)之间,价值在\(1\sim10^9\)之间。\(n\leq10^5\)。Minkowski和会遇到不连续的问题。不妨按照\(i\bmod12\)划分dp数组,每个剩余系都是凸的。枚举拿了\(......
  • FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
    ​《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。SRS是一......
  • Pytorch笔记|小土堆|P14-15|torchvision数据集使用、Dataloader使用
    学会看内置数据集的官方文档:https://pytorch.org/vision/stable/generated/torchvision.datasets.CIFAR10.html#torchvision.datasets.CIFAR10示例代码:importtorchvisionfromtorch.utils.tensorboardimportSummaryWriterfromtorchvisionimporttransforms#ToTensorte......
  • java学习笔记9
    一、线程与进程        线程是指计算机中能够执行独立任务的最小单位。它是进程的一部分,一个进程可以包含多个线程。每个线程都是独立运行的,它们共享进程的资源,如内存空间和文件句柄等。线程之间可以通过共享内存进行通信,因此线程之间的切换开销较小。      ......
  • 硬件开发笔记(二十九):TPS54331电源设计(二):12V转3.3V和12V转4V原理图设计
    若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/140868749长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…硬件相关开发......
  • 谷粒商城实战笔记-115-全文检索-ElasticSearch-进阶-bool复合查询
    文章目录1,must2,mustnot3,should1,must{"query":{"bool":{"must":[{"match":{"gender":"M"}},{"matc......
  • 谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析
    文章目录一,基本概念主要聚合类型二,实战1,搜索address中包含mill的所有人的年龄分布以及平均年龄,但不显示这些人的详情2,按照年龄聚合,并且请求每个年龄的平均薪资Elasticsearch的聚合(Aggregations)功能允许用户对数据集进行聚合分析,从而获得数据的摘要信息。聚......
  • 动态规划学习笔记
    P3195求出玩具的前缀和\(S\)。设\(f_i\)表示区间\([1,i]\)的最大答案。开始应该是\(f_0=0\)。\(f_i=\max_{1\lej<i}f_j+(i+S_i-L-1-(j+S_j))^2\)。\(f_i=\max_{1\lej<i}f_j+(i+S_i-L-1)^2+(j+S_j)^2-2(i+S_i-L-1)(j+S_j)\)。设\(g_i=i+S_i,k=L+1\),那么\(f_......
  • 生成函数 学习笔记
    生成函数学习笔记有一部分没地方写的组合数学,先写这里。0.pre-learning1.上升/下降幂:\[n^{\underline{k}}=n\times(n-1)\times\cdots\times(n-k+1)\]称为\(n\)的下降幂。同理:\[n^{\overline{k}}=n\times(n-1)\times\cdots\times(n+k-1)\]称为\(......
  • C++学习笔记之指针高阶
    数组名数组名字是数组的首元素地址。一个指针变量保存了数组元素的地址。我们就称之为数组元素指针,及数组指针。数组指针的本质是指针,指向数组中的某个元素的地址。 由于数组名可以代表数组收元素地址,数组元素是可以通过 数组名[下标]的格式访问,那么可以定义一个指针......