在简书上看到这篇文章,读完欲罢不能。分析得实在是透彻,赶紧转一下。添加一些自己体会及思考。
在看这篇文章的同时,可以去下载一下苹果的OC源码,对照分析,更利于体会。而且苹果的源码里面还可以搞清楚好多东西。
苹果的源码中,有很多宝藏,每看一次,都能有所收获。
OC源码下载地址:https://opensource.apple.com/tarballs/objc4/
部分内容原文地址:https://www.jianshu.com/p/fa66c8be42a2
看下面文章前,先思考下面三个问题
- Category的实现原理,以及Category为什么只能加方法不能加属性。
- Category中有load方法吗?load方法是什么时候调用的?load 方法能继承吗?
- load、initialize的区别,以及它们在category重写的时候的调用的次序。
Category的本质
首先我们写一段简单的代码,之后的分析都基于这段代码。
Presen类
// Presen.h
#import <Foundation/Foundation.h>
@interface Preson : NSObject
{
int _age;
}
- (void)run;
@end
// Presen.m
#import "Preson.h"
@implementation Preson
- (void)run
{
NSLog(@"Person - run");
}
@end
Presen扩展1
// Presen+Test.h
#import "Preson.h"
@interface Preson (Test) <NSCopying>
- (void)test;
+ (void)abc;
@property (assign, nonatomic) int age;
- (void)setAge:(int)age;
- (int)age;
@end
// Presen+Test.m
#import "Preson+Test.h"
@implementation Preson (Test)
- (void)test {
}
+ (void)abc{
}
- (void)setAge:(int)age {
}
- (int)age
{
return 10