iOS Category(类目)和 Extension(扩展) 的区别和创建

一. Category(类目) 和Extension(扩展) 文件的创建

  1. command + N 打开文件模板

     

    2781816-5de833bd6ef1d2b7.png

    文件模板

  2. 选择 Objective-C File, 然后点击 Next

     

    2781816-c5b283279f7ffc7d.png

    选择 Objective-C File

二. Category(类目) 和Extension(扩展)的区别

  1. Category(类目)
    分类(类目, category),为没有源代码的类(如:NSString)扩充方法,并且只能扩充方法,不能直接扩充属性, 添加属性需要通过关联对象(Objective-C Associated Objects)
    一旦添加方法,这些方法就是该类自己的方法,就可以根据具体的方法( + 号 或者 - 号方法)由类或者对象来调用
#import <Foundation/Foundation.h>

@interface NSString (SayHi)

- (void)sayHi;

+ (void)sayHello;

//添加获取首字母,不是大写,改成大写
- (NSString *)first;


//添加获取尾字母,不是小写,改成小写
- (NSString *)last;
#import "NSString+SayHi.h"

@implementation NSString (SayHi)

- (void)sayHi {
    NSLog(@"hello world!");
}

+ (void)sayHello {
    NSLog(@"你好");
}

//添加获取首字母,不是大写,改成大写
- (NSString *)first {
    NSString *str = [[self substringToIndex:1] uppercaseString];
    return str;
}

//添加获取尾字母,不是小写,改成小写
- (NSString *)last {
    NSInteger length = [self length];
    NSString *str = [[self substringFromIndex:length - 1] lowercaseString];
    return str;
}
  1. Extension(扩展)
#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    NSString *_name;
    NSString *_gender;
}

//setter
- (void)setName:(NSString *)name;
- (void)setGender:(NSString *)gender;

//getter
- (NSString *)name;
- (NSString *)gender;
#import "Student.h"
//类的延展:
//在.m 文件中, 只为有源代码的类,扩充功能(实例变量, 方法),延展中的实例变量和方法是本类私有的,只能在本类中访问.
@interface Student ()
{
    NSInteger _age;
}

//sayHi
- (void)sayHi;

@end

@implementation Student
//setter
- (void)setName:(NSString *)name {
    _name = name;
}
- (void)setGender:(NSString *)gender {
    _gender =gender;
}

//getter
- (NSString *)name {
    [self sayHi];
    return _name;
}
- (NSString *)gender {
    return _gender;
}
#pragma mark --- Extension Methods
//sayHi
- (void)sayHi {
    NSLog(@"Hello, junyi");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值