9 OC加强03

9 OC基础加强03

分类(cagetory) 类别,类目 (模块名)关键符号

作用:
- 将一个类分成多个模块,将相似的功能鞋在同一个模块中,以便后期的维护修改.但是要注意引用的是哪个分类文件,只引用本类文件无法调用方法.
- 分类中可以写方法,但是不能写属性(可以写@property,但是不能生成私有属性,不能生成set,get方法的实现,只能生成申明).
- 本类中的真私有属性分类也无法直接访问,可以通过方法的调用(语法)访问.
- 分类可以写同名方法,但是调用时会调用分类中编译顺序中实现的最后编译的方法,如下
例子:给一个人对象的诸多方法进行分类.

非正式协议 ( )
  • 和协议无关,只是对Xcode系统自带的类写分类.

例子:为NSString 类写一个统计这个字符对象中数组的个数.

延展,类扩展(extension) ( )关键符号内部不写

意义:为一个类,定义私有化属性和方法,规范:写在该类的.m文件中,并且以前说私有方法直接写类的实现,不写声明改为在延展中写声明,方便直接查看私有方法.

一个特殊的分类,1.延展是一个匿名分类…2.只有声明,与本类共享实现…3,还可以写@property(这个生成的是真私有属性,同时生成set,get方法的声明和实现)

block类型(记得调用,才能实现)

* 存储代码块(有限制的储存),本质是数据类型 *数据类型可以声明变量,作为参数.其实是一个匿名的函数.
- block变量的声明

     //这个数据类型很特别,他声明变量名不是在最后,而是写在中间
            void (^myblock)(int num1,int num2)

* 变量名为:myblock *

* 类型为:void(^)(int num1,int num2); *

  • block变量的赋值
           myblock = ^void(int num1,int num2){
            num1 = 21;
            num2 = 22;
        };
  • block变量的定义的同时初始化.
void (^myblock)(int num1,int num2) = ^void(int num1,int num2){
            NSLog(@"%d---%d",num1,num2);
        };
  • typedef简化block类型
typedef int arr[3];
//前面的意思是给一个长度为3的int类型数组起名叫做arr,arr是一个类型;
    arr arr1--->arr1才是变量名
    typedef void (^Myblock)();

* 此时Myblock在这里是给void (^)()类型起了一个Myblock的别名(类型名首字母大写). *
- block代码块内部的全局变量和局部变量
全局变量可以直接修改,局部变量不能修改(加* _ _block *才能修改)
- block中的省略

void (^myblock)(int num1,int num2) = ^void(int num1,int num2){
            NSLog(@"%d---%d",num1,num2);
        };
声明中参数名可以省略,实现中返回值可以省略(自动判断返回值),实现无参可以省略.
  • block作为函数的参数
  • block作为方法的参数(调动block)
    都是直接把block类型生成一个变量(可以先typedef换别名).
协议(protocol)
内存区域的大概地址(前缀)

桟区:0x7f

堆区;0x00

全局区:0x0000

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值