类目和延展

main.h

#pragma mark 类的管理
#pragma mark 类的分组(重点)
    /**
     *  分类(Category):常用来给拿不到源代码的类添加新方法或用来管理一个类的方法列表,将功能相似的方法声明、实现写在一个分类中(苹果的做法)
     *  在分类中只能添加新的方法,不能添加新的实例变量
     **/
    NSString *string = @"lll";
    [string sayHi];
    [string sayHello];

    NSDate *date = [NSDate exchange:@"20140505120512"];
    NSLog(@"%@",date);
    
    
    Person *person = [[Person alloc] init];
    [person sayHi];
    

#pragma mark Extension延展
    
    /**
     * 延展是用来给类添加私有实例变量、方法的一种管理方式。
     * 延展和分类的区别:
     * 1、分类中只能添加新方法,不能添加实例变量,延展中可以添加私有方法和实例变量
     * 2、使用分类添加的方法可以在类的外部访问,使用延展添加的实例变量和方法,只能在类的内部使用,在外部访问不到。
     * 3、分类可以使用一对.h.m文件来管理,延展一般直接在类的.m中添加延展标签,在延展标签中写代码
     *
     **/
    

1.延展
Person_PersonExtension.h

#import "Person.h"

@interface Person ()

//  我们可以通过延展来给类添加一个私有的实例变量,该实例变量,不管可见度是什么,在类的外部都不能被访问到,只能在类的内部访问。
{
    NSString *_name;
}
- (void)heHe;

@end

Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

@end



// 在能拿到源代码的类中(自定义的类),我们可以使用分类来管理功能相似的方法,也可以在分类中给该类添加新方法
@interface Person (sayHi)
- (void)sayHi;
@end

Person.m

#import "Person.h"
#import "Person_PersonExtension.h"
//  延展中的小括号必须保持空白,如果小括号中添加了其他字符,则该延展会变成一个私有分类,分类不可以添加实例变量
@interface Person ()
{   //  使用延展给本类添加一个私有实例变量
    NSString *_gender;
}
@end



@implementation Person
- (void)heHe{
    NSLog(@"哈哈哈");
    
}
@end
@implementation Person (sayHi)
//对于在分类中声明的方法,我们既可以在本类的实现标签中添加实现方法,也可以新建一个Category的实现标签,在这个实现标签(.m文件)中实现新方法
- (void)sayHi{
    NSLog(@"hello");
}

@end

2.为日期类添加一个dataWithDateString方法
NSDate+dataWithDateString.h

#import <Foundation/Foundation.h>

@interface NSDate (dataWithDateString)
+ (NSDate *)exchange:(NSString *)str;
@end

NSDate+dataWithDateString.m

#import "NSDate+dataWithDateString.h"

@implementation NSDate (dataWithDateString)
+ (NSDate *)exchange:(NSString *)str{
    // 1.创建出格式化对象
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    // 2.设置formatter的格式
    [formatter setDateFormat:@"yyyyMMddHHmmss"];
    // 2.将字符串转化为时间对象,并返回
    NSDate *date = [formatter dateFromString:str];
    return date;
}
@end

3.为NSString类添加一个sayHi方法
NSString+sayHi.h

#import <Foundation/Foundation.h>

@interface NSString (sayHi)
- (void)sayHi;
- (void)sayHello;
@end

NSString+sayHi.m

#import "NSString+sayHi.h"

@implementation NSString (sayHi)
- (void)sayHi{
    NSLog(@"lalala");
}
- (void)sayHello{
    NSLog(@"洛洛是宗儒的男人!!!");
}
@end
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 下面是我最近两年学习OC中的一些基础知识,对于学习OC基础知识的人可能有些帮助,拿出来分享一下,还是那句话不喜勿喷...
    小小赵纸农阅读 2,796评论 1 7
  • 类目和延展的作用都是为了扩展一个类。一、类目的定义和作用 二、类目的声明: 三、类目实现: 四、类目使用需要注意的...
    御风邪物阅读 1,115评论 0 3
  • 0、封装 一、类目(category)的基本概念和用法 1、封装是面向对象的一个特征,OC也不意外,但有时候我们会...
    任梦RM阅读 372评论 0 0
  • 一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCoco...
    coder_小玖阅读 1,110评论 0 0

友情链接更多精彩内容