iOS 分类的基本使用(更改frame)以及全局变量.pch的使用

iOS分类基础以及基本应用

Objective-C提供了一个非常灵活的类(Class)扩展机制-类别(Category)。
类别用于对一个已经存在的类添加方法(Methods)。你只需要知道这个类的公开接口,
不需要知道类的源代码。需要注意的是,类别不能为已存在的类添加实例变量(Instance Variables)。

注意几点:
1.现有类的类名位于 @interface之后
2.括号中是类别的名称(只要名称唯一,可以添加任意多的类别)
3.类别没有实例变量部分

分类的作用:
(1)将类的实现分散到多个不同文件或多个不同框架中。
(2)创建对私有方法的前向引用。
(3)向对象添加非正式协议。

类别的局限性
有两方面局限性:
(1)无法向类中添加新的实例变量,类别没有位置容纳实例变量。
(2)名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
无法添加实例变量的局限可以使用字典对象解决.
What’s more?
创建一个NSObject的类别称为“创建一个非正式协议”。因为,NSObject是顶级父类,在NSObject中添加了该方法,也就是说通过继承关系,所有的类中都有该方法。
正式协议是通过protocol指定的一些列方法的声明,然后由实现该协议的类自己去实现这些方法。
而非正式协议是通过向NSObject中添加一个类别来实现,然后子类去继承NSObject。其实都差不多。
不过,非正式协议已经渐渐被正式协议取代,正式协议最大的优点就是可以使用泛型约束

下面就具体如何使用类别举例:

假设一个Teacher类,在.h中暴露一个teach(讲课)的方法,实现文件.m中又定义了一个preteach(备课)的私有方法,一般情况下无法访问到这个没有暴露在接口文件的私有方法。下面我用分类对它进行访问。

新建类Teacher

#import <Foundation/Foundation.h>
@interface Teacher : NSObject
- (void)teach;
@end

在实现文件中实现方法:

#import "Teacher.h"

@implementation Teacher

- (void)teach{
    NSLog(@"方法--老师讲课");
}

- (void)preteach{
    NSLog(@"方法--老师备课");
}//该方法没有在接口中定义,为私有的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值