OC的数据类型补充

OC的数据类型补充

1. Block

Block封装了一段代码,可以在任何时候执行

Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或者返回值

苹果官方建议尽量多用Block。在多线程、异步任务、集合遍历、集合排序、动画专场用的很多

Block跟函数很像:

可以保存代码

有返回值

有形参

调用方式一样

补充词汇:templates 模板、minus减法

//定义Block变量

void(^myblock)() = ^{

NSLog(@”-----------------------------”);

NSLog(@”-----------------------------”);

};

//利用Block变量调用Block内部的代码

myblock();

int  (^sumblock)(int  , int)  =  ^(int a ,  int b){

return a+b;};

typedef  int (^MyBlock)(int , int);

Block中要掌握的东西:

1.    如何定义block变量

Int (^sumBlock)(int , int);

Void (^myBlock)();

2.    如何封装block代码

^(int a,int b) {

returna-b;

};

^() {

NSLog(@”----------------------”);

};

^   {

NSLog(@”----------------------”);

};

3.    Block访问外面变量

l  Block内部可以访问外面的变量

l  默认情况下,Block内部不能修改外面的局部变量

l  给局部变量加上__block关键字,这个局部变量就可以在block内部修改

4.    利用typedef定义block类型

typedef  int (^MyBlock)(int , int);

Protocol 协议

基本用途

可以用来声明一大堆方法(不能声明成员变量)

只要某个类遵守了这个协议,就相当于拥有这个协议中的所有方法声明

只要父类遵守了某个协议,就相当于子类也遵守了

格式

协议的编写

@protocol 协议名称<NSObject>

//方法声明

@end

b)     某个类遵守协议

@interface 类名:父类<协议名称>

@end

3.     关键字

协议中有两个关键字可以控制方法是否要实现(默认是@required),在大多数情况下,用途在于程序员之间的交流

@optional  不要求实现

@required  要求实现,不实现就会发出警告

4.     协议遵守协议

一个协议可以遵守其他多个协议,多个协议之间用逗号隔开

一个协议遵守了其他协议,就相当于拥有了其他协议中的方法声明

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

@end

5.     基协议

NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它

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

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

Id<协议名称> 变量名

例如:

NSObject <MyBlock> *obj;

Id<MyBlock>   obj;

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

7.    @protocol中声明的属性也可以做一个遵守协议的限制

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

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

例如:

@protocol(nonatomic,strong)Dog<MyBlock> *dog;

@protocol(nonatomic,strong)id <MyBlock> dog;

8.    协议可以定义在其他单独.h文件中,也可以定义在某个类中

a)      如果这个协议只用在某个类中,就把协议定义在该类中

b)     如果这个协议用在很多类中,就把协议定义在单独文件中

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

a)      一般情况下,都是定义在单独文件中

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

10.          协议的应用---代理模式

时间: 2024-10-17 07:01:19

OC的数据类型补充的相关文章

OC常用数据类型大全解

UI基础 OC常用数据类型 Block Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值.它和传统的函数指针很类似,但是有区别:block是inline(内联函数)的,并且默认情况下它对局部变量是只读的 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 Blocks的定义 Blocks的定义: int (^MySum)(int, int) = ^(int a, int b) { re

Mysql学习笔记(二)数据类型 补充

原文:Mysql学习笔记(二)数据类型 补充 PS:简单的补充一下数据类型里的String类型以及列类型... 学习内容: 1.String类型 2.列类型存储需求 String类型: i.char与varchar char与varchar的类型相似,但是他们的保存方式和检索方式不同... char的存储结构是固定长度的存储...即指定了几个字节,那么就占用几个字节,如char(4),那么无论存入的是什么字串,那么都占用四个字节...char的 可表示长度范围为0-255的任何值,当保存的字节不

oc之数据类型转换规则

对含所有不同类型数据的表达式求值时,Objective-C编译器会遵循一些非常严格的规则,下面总结了表达式求值的过程中,不同类型的操作数发生转换的先后顺序: 1.如果其中一个操作数是long double类型的,另一操作数被转为long double型,则计算结果也是这种类型. 2.如果其中一个操作数是double型,另一操作数转换为double型,则计算结果也是这种类型. 3.如果其中一个操作数是float型,另一操作数转换为float型,则计算结果也是种类型. 4.如果其中一个操作数是Boo

基础数据类型之集合和深浅copy,还有一些数据类型补充

集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系测试,测试两组数据之前的交集.差集.并集等关系. #关于集合和波尔值之间的苟苟且且# set ={1,2,3,4,5,True,(1,2,3),} #集合具有自动去重和去空格功能# set.add(False)# set.add(True) #打印结果显示,没有Teue,应该是集合内部的数字和元组不

巨蟒python全栈开发-第7天 基本数据类型补充&amp;深浅拷贝

1.基本数据类型补充 2.深浅拷贝 DAY5-基本数据类型(基本数据类型补充&深浅拷贝) 本节主要内容: 1 (1)#1.'''#字符串是不可变的数据类型lst=['alex','dsb','wusir','xsb']#大烧饼,小烧饼s='_'.join(lst) #使用前面的字符串,对后面的列表进行拼接,拼接的结果是一个字符串print(s)'''(2)'''#split() 根据你给的参数进行切割,切割的结果是列表 s='alex_dbs_wusir_xsb'lst=s.split("

python之数据类型补充、集合、深浅copy

一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址. 小数据池: 前提:int,str,bool 1,节省内存. 2,提高性能和效率. 小数据池是什么? 在内存中,创建一个'池',提前存放了 -5 ~256 的整数,一定规则的字符串和bool值. 后续程序中,如果设置的变量指向的是小数据池的内容,那么就不会再内存中重新创建. 小数据池与代码块的关系

基础数据类型补充

?. 基础数据类型补充  ?先关于int和str在之前的学习中已经讲了80%以上了. 所以剩下的??看?看就可以了.我们补充给?个字符串基本操作 li = ["李嘉诚", "麻花藤", "?海峰", "刘嘉玲"]s = "_".join(li)print(s)li = "?花?闺?"s = "_".join(li)print(s) 列表:     循环删除列表中的每?

python基础之数据类型补充(基础五)

第七章 python基础之数据类型补充(基础五) 7.1 数据类型补充 字符串str,整型int,列表list,元组tuple,字典dict. 7.1.1 字符串str类型补充 s1 = str(123) #类型字符串 s.capitalize() 首字母大写 s = "alex wusir" s1 = s.capitalize() #首字母大写:Alex wusir print(s1) s.title() 每个单词首字母大写 s = "alex wusir" s1

基本数据类型补充及二次编码

基本数据类型补充及二次编码 基本数据类型补充 1.字符串str 1.1 首字母大写 .capitalize() name = 'alex' name = name.capitalize() print(name) # 结果:Alex 1.2 每个单词首字母大写 .title() name = 'alex_sb' name = name.title() print(name) # 结果:Alex_Sb 1.3 大小写反转 .swapcase() name = 'alex' name = name.