Objective-C第六版第11章---Categroies and delegate

本章主要讲解类型和协议

1. 类型:Categories.如果一个类想增加方法。可以通过Categories去增加方法。

注意:Categroies声明和定义可以放在一个文件中。但是通常的做饭是把它放进两个文件,一个头文件,一个.m文件。只是命名有区别。通常使用“类名+类型名.h/m”。

类型名首字母也大写。

例子:

//
//  Fraction+Comparison.h
//  Fraction
//
//  Created by zhengna on 15/6/30.
//  Copyright (c) 2015年 zhengna. All rights reserved.
//

#import "Fraction.h"

@interface Fraction (Comparison)

- (BOOL) isEqualTo: (Fraction *)f;
- (int) compare: (Fraction *)f;

@end

//
//  Fraction+Comparison.m
//  Fraction
//
//  Created by zhengna on 15/6/30.
//  Copyright (c) 2015年 zhengna. All rights reserved.
//

#import "Fraction+Comparison.h"

@implementation Fraction (Comparison)

- (BOOL) isEqualTo: (Fraction *)f{
    
    [self reduce];
    [f reduce];
    
    if (self.numerator == f.numerator && self.denominator == f.denominator){
        return YES;
    }else{
        return NO;
    }
}

- (int) compare:(Fraction *)f{
    
    [self reduce];
    [f reduce];
    
    float result = [self convertToNum] - [f convertToNum];
    
    if (result < 0) {
        return -1;
    }else if(result == 0){
        return 0;
    }else{
        return 1;
    }
}

@end

2. 类扩展。

其实它就是一种匿名的类型。

跟普通类型的区别:

1)没有类型名

2)可以扩展主类的实例变量和方法,在普通类型里不可以。

3)只能维护在主类的定义文件中,不可以在别的文件里。

重要作用:类扩展中定义的实例变量和方法都是私有的。只能在类内部使用。

例子:

#import "Fraction.h"
// Make the reduce method private

@interface Fraction ()
-(void) reduce;
@end
// Define the methods for the Fraction class
@implementation Fraction
@synthesize numerator, denominator;
-(void) setNumerator: (int) n and Denominator: (int) d
{
...
]
...
@end

3. 协议。

协议是一组方法的集合用来在不同类之间共享。

它不提供定义只提供方法定义。这些方法的实施交由别的类或者你去实现。

@protocol NSCopying
- (id)copyWithZone: (NSZone *)zone;
@end

@interface AddressBook: NSObject <NSCopying>
协议的目的之一是标准化一些操作。

一个协议也可以加入另一个协议。

@protocol Drawing3D <Drawing>

也可以在.m文件中导入协议。


4. 代理Delegate

它是一中协议,可以把它理解为两个类之间的一个接口。

理解为一个类定义的协议需要代理给实现这个协议的类去实现。

举例说明:比如你想显示一个UITableView去显示一个Table, 但是UITableView不知道表格的标题, 有多少section, 一个section有多少row。 或者放在每列里的内容是什么(Cell)。 所以,它代理这个责任给你通过定义一个协议叫UITableViewDataSource. 当UITableView需要每个section里有多少row的信息,它就会调用代理方法numberOfRowInSection。这个方法是需要你事先实现的。因为UITableView不知道应该放多少行,只能代理给你去实现。


5. informal protocol

非正式协议。

可以用来实现一个系统已经定义的协议在主实现文件中,并且不需要实现这个协议里的所有内容。

比如:这里实现了一个informal protocal 'NSComparisonMethods'

#import "Fraction.h"

@interface Fraction (NSComparisonMethods) //informal protcol

- (BOOL)isEqualTo:(id)object;
- (BOOL)isLessThan:(id)object;
- (BOOL)isLessThanOrEqualTo:(id)object;
- (BOOL)isGreaterThanOrEqualTo:(id)object;
- (BOOL)isGreaterThan:(id)object;
- (BOOL)isNotEqualTo:(id)object;

@end

@implementation Fraction

@synthesize numerator, denominator;

// implement the informal protcol
- (BOOL)isEqualTo:(id)object{

    Fraction *arg = object;
    
    [self reduce];
    [arg reduce];
    
    if (self.numerator == arg.numerator && self.denominator == arg.denominator) {
        return YES;
    }else{
        return NO;
    }
}

6. 复合Composite

@interface Square: NSObject
{
Rectangle *rect;
}
-(int) setSide: (int) s;
-(int) side;
-(int) area;
-(int) perimeter;
@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值