OC学习之道:OC中类别--Category类目的使用/Eetension类的扩展 的使用

/ Objective-C中的类目(Category)的使用.1.类目,2.扩展,3.协议
        //为什么使用类目,通过继承来实现某项功能话,有点大材小用的感觉,因为我们有时候只需要实现一个方法,所以继承就大了,没必要,而且NSString是不允许继承的
        //创建类目文件是在cocoa的object-c category项目下创建
    //1.类目
        //1.1为没有源码的类型扩展功能(一般读系统提供的类,因为我们看不到该类的.m文件)
        //1.2扩展的功能将会成为原类的一部分
        //1.3通过类目可以给原始类添加功能(方法)但是不能给原始类添加实例变量
        //1.4类目可以覆盖方法,但是不会再执行之前的那个方法了,而是调用新的方法

//
//  main.m

//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NSString+SayHi.h"
#import "NSDate+ChangeType.h"
int main(int argc, const char * argv[])
{

    @autoreleasepool {

#pragma mark----Category类目的使用
        
        
        NSString *str1 = @"刘亦菲";
        NSString *str2 = @"张飞";
        [str1 HelloGG];//self调用自身:str1
        [str2 HelloMM];
       // [NSString test];//类方法

        //作业1:使⽤用Category为NSDate类添加⼀一个类⽅方法(dateWithDateString:),实现将下述字符串转换为NSDate对象。 将@“20140402142850”转换为NSDate。
       NSDate *result= [NSDate dateWithDateString:@"2013-12-10 10:30:00"];
        NSLog(@"%@",result);
        
        
        
        
        
 #pragma mark----Eetension类的扩展       
      //Extension针对的是⾃己的类,必须有源代码的类
        //1.延展可以添加实例变量,但是类目不可以
        Person *person = [[Person alloc]init];
        
        [person work];
        
        int result1 = [person factorial:2];//外界我们只需要传入参数2就行了,不需要知道怎么实现的
        NSLog(@"%d",result1);
        



}
return 0;
} 

//
//  NSString+SayHi.h

//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NSString (SayHi)
-(void)HelloMM;
-(void)HelloGG;
+(void)test;
@end

//
//  NSString+SayHi.m

//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import "NSString+SayHi.h"

@implementation NSString (SayHi)
-(void)HelloMM{
    NSLog(@"哈喽,刘亦菲,我是%@",self);
}
-(void)HelloGG{
    NSLog(@"哈喽,童星%@",self);
}
+(void)test{
    NSLog(@"%@",self);
}
@end

<pre name="code" class="html"><br/>

//
//  Person.m
//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import "Person.h"

@interface Person (private)//private省去也是没有关系
//以下为私有方法,只能在类的内部(当前的Person类)访问,外界是访问不到的,
-(void)_showInfo;
-(int)squre:(int)count;//求平方
-(int)factorial:(int)number;//求阶乘
@end
//类的延展的语法形式如上,就相当于C中函数的声明

@implementation Person{
    int _number;
    //在这里定义属性,这个属性也是私有的
    //但是这种方式和之前定义的@private的区别
    //两者的区别就是一个在.h文件中定义的,一个是.m文件中定义的
    //如果是开源的话,一般是开放.h和.m文件
    //如果是闭源的话,一般只开放.h文件
}
//私有方法,只是在.m文件中定义了,没有在.h文件中声明,一般是在本类中自己使用的
-(int)squre:(int)count{
    return count*count;
}//求平方

-(int)factorial:(int)number{//该方法是需要声明的,它相当于一个借口,供外界传入参数进行使用
    int result = 1;
    int value = [self squre:number];//本类自己调用私有方法先求平方
    //计算平方之后的阶乘
    for (int i=1; i<=value; i++) {
        result = result*i;
    }
    return result;
    
}//求阶乘
-(void)work{
    
    [self _showInfo];
    
    NSLog(@"开始工作了");
}

-(void)_showInfo{
    NSLog(@"我的信息");
}
@end



//
//  Person.h
//  Copyright (c) 2015年 tongxing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Person : NSObject{
    NSString *_name;
    int _age;
}
-(void)work;
-(int)factorial:(int)number;
@end





                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值