类扩展(Extension)

150 篇文章 0 订阅

Extension 是Category的一个特例

其名字为匿名(为空),并且新添加的方法一定要予以实现. (Category没有这个限制)

@interface MyClass() {

float value;

}

// 单独扩展出来.h文件 #import 到 .m 文件中, 要是 包含到 .h文件中 就找不到类了.

这种写法的类别叫 匿名类别, 又叫类扩展, 所谓的扩展, 其实就是为一个类添加额外的原来没有的变量, 方法或合成属性.


作用, 可以定义私有的变量和方法, 因为Extension 声明的变量和方法 不能被子类 继承.

Person.m

#import "Person.h"

@interface Person()
{
    float _weight; //私有变量
}
- (void)run; //私有方法, 因为直接写在.m文件里了, 类扩展.
@end

@implementation Person
- (void)run
{
    NSLog(@"person is running");
}
@end




//************************ stone ***

main.m

#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
	@autoreleasepool {
        Person *p = [[Person alloc] init];
        p.age = 18;
        p.name = @"zhangsan";
        NSLog(@"%@",p.name);
        NSLog(@"%d",p.age);
	}
	return 0;
}


Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject
/** name */
@property (nonatomic,strong) NSString * name;
+(void)test;
@end


/**
 *  写法1: 写在.h文件里 可以写property, 自动生成set get方法,
 *  扩展一个run方法 , 必须在.m 文件中实现, 不然有警告.
 */
@interface Person()
@property (nonatomic,assign) int age;
- (void)run;
@end


Person.m

#import "Person.h"
#import "Person_extension.h"
/**
 *  写法2: 写在.m文件里, property 自动生成 set,get方法, 只不过是私有变量,不能使包含.h文件的其他文件调用
 *  声明的方法必须实现, 不然有警告.
 */
@interface Person()
/** name2 */
@property (nonatomic,strong) NSString * name2;
- (void)run2;
@end

@implementation Person
+(void)test{

}
-(void)run{

}
-(void)run2{
    
}
-(void)run3{
    
}


Person_extension.h

#import "Person.h"
/**
 *  写法3: 创建之后先导入到.m文件中, 不然连 NSString都没提示, 得生敲, 蛋疼
 *  增加属性, 可以写@property,包含此文件的.m文件中自动生成 set,get方法.不过是私有的,
 */
@interface Person ()
/** name3 */
@property (nonatomic,strong) NSString * name3;
- (void)run3;

@end


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值