OC - 类目、延展、协议

 

 

[类目]

在原有类的基础上添加方法,不可添加变量和属性,只添加方法。

 

1、类目创建

在.h文件中完成类目方法的声明:

#import <Foundation/Foundation.h>

//关键字  原有类名 (类目名)

@interface NSString (Sub)

//声明新的NSString方法 计算数字类型字符串差值(即声明新的  类的方法)

- (NSInteger)subStringWithOther:(NSString *)other;

@end

 2、类目方法实现

在.m文件中完成类目方法实现

#import "NSString+Sub.h"                                             //引用类目.h文件

@implementation NSString (Sub)

- (NSInteger)subStringWithOther:(NSString *)other {      //实现新的NSString方法

 

    NSInteger a = [self integerValue];

    NSInteger b = [other integerValue];

    return a - b;

}

@end

 3、调用类目方法

 

#import <Foundation/Foundation.h>

#import "NSString+Sub.h"                                          //引用类目.h文件

int main(int argc, const char * argv[]) {

    @autoreleasepool {

 

        NSString *str1 = @"123";                                     //创建测试str1  

        NSString *str2 = @"456";                                     //创建测试str2

        NSInteger result = [str1 subStringWithOther:str2]; //创建接收result

        NSLog(@"%@ - %@ = %ld", str1 ,str2, result);

 

   return 0;

}

 

[延展]

在类中添加私有方法、变量,仅该类可见。

 

1、延展创建与实现

在.m文件中创建私有变量和私有方法

私有变量在.m文件中全局访问,没有setter/getter方法,不对外公开

私有方法在.m文件中全局调用,不对外公开

 

#import "类名.h"

@interface 类名()

             //声明私有变量、私有方法区域

@end

@implementation 类名

 //实现类的方法和私有方法区域

@end

2、备注:延展变量和延展方法无法在.m文件中直接调用

 

[协议]

只声明,不实现,其他类实现的接口。

默认为@required                       //强制实现

          @optional                        //选择实现

 1、协议创建

协议只有.h文件,用于声明,不实现

 @protocol 协议名 <类名>

 @required                //遵守协议后必须实现的方法和属性 默认值@required

 @optional                //选择执行的协议方法和属性

 

*相关扩展*

 

@dynamic  //动态绑定属性

判断是否遵守协议以及实现方法

 if(![实例变量 conformsToProtocol:@protocol(协议名)]) {

            NSLog(@"没有遵守协议!");

        }

if (![实例变量 respondsToSelector:@selector(方法)]) {

                NSLog(@"没有实现方法!");

         }

 

 

 

---恢复内容结束---

posted on 2015-07-02 19:24  summerpopo  阅读(165)  评论(0)    收藏  举报

导航