- 不要等到明天,明天太遙遠(yuǎn),今天就行動(dòng)。
須讀:看完該文章你能做什么?
1.知道 方法的調(diào)用順序
2.知道 多個(gè)分類的一些注意事項(xiàng)(同名方法中 系統(tǒng)是怎么調(diào)用的)
學(xué)習(xí)前:你必須會(huì)什么?(在這里我已經(jīng)默認(rèn)你具備C語言的基礎(chǔ)了)
什么是分類
分類是用于給原有類添加方法的,只能添加方法,不能添加屬性(成員變量)
一、本章筆記
一、分類的注意點(diǎn)
1.分類是用于給原有類添加方法的,只能添加方法,不能添加屬性(成員變量)
2.分類中的 @property, 只會(huì)生成 setter / getter方法的聲明,不會(huì)生成實(shí)現(xiàn) 以及 私有的成員變量
3.可以在分類中 訪問原有類中 .h 的屬性
4.如果多個(gè)分類中 都有原有類中 同名的方法, 那么調(diào)用該方法的時(shí)候執(zhí)行誰 由編譯器決定
會(huì)執(zhí)行 最后一個(gè) 參與編譯的分類中的方法
注意 : 如果分類中 有 和 原有類同名的方法,會(huì)調(diào)用分類中的方法
也就是說會(huì)忽略原有類的方法
注意 : 在開發(fā)中 盡量不要這樣寫
二、方法的調(diào)用順序:
1.分類
2.本類
3.父類
二、code
main.m
#pragma mark 09-分類注意事項(xiàng).mp4
#pragma mark 概念
/*
一、分類的注意點(diǎn)
1.分類是用于給原有類添加方法的,只能添加方法,不能添加屬性(成員變量)
2.分類中的 @property, 只會(huì)生成 setter / getter方法的聲明,不會(huì)生成實(shí)現(xiàn) 以及 私有的成員變量
3.可以在分類中 訪問原有類中 .h 的屬性
4.如果多個(gè)分類中 都有原有類中 同名的方法, 那么調(diào)用該方法的時(shí)候執(zhí)行誰 由編譯器決定
會(huì)執(zhí)行 最后一個(gè) 參與編譯的分類中的方法
注意 : 如果分類中 有 和 原有類同名的方法,會(huì)調(diào)用分類中的方法
也就是說會(huì)忽略原有類的方法
注意 : 在開發(fā)中 盡量不要這樣寫
二、方法的調(diào)用順序:
1.分類
2.本類
3.父類
*/
#pragma mark - 代碼
#import <Foundation/Foundation.h>
#pragma mark 類
#import "Person+LYH.h"
#pragma mark - main函數(shù)
int main(int argc, const char * argv[])
{
Person *p = [[Person alloc]init];
// p.height = 1.77; // '-[Person setHeight:]: unrecognized selector sent to instance 0x100501380'
[p say];
return 0;
}
Person
>>>.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
double _weight;
}
@property (nonatomic,assign) int age;
- (void)say;
@end
>>>.m
#import "Person.h"
@implementation Person
@end
Person+LYH
>>>.h
#import "Person.h"
// 1.分類是用于給原有類添加方法的,只能添加方法,不能添加屬性(成員變量)
@interface Person (LYH)
//{
// double _height;
//}
// 2.分類中的 @property, 只會(huì)生成 setter / getter方法的聲明,不會(huì)生成實(shí)現(xiàn) 以及 私有的成員變量
//@property (nonatomic,assign) double height;
- (void)hello;
@end
>>>.m
#import "Person+LYH.h"
@implementation Person (LYH)
- (void)hello
{
// 3.可以在分類中 訪問原有類中 .h 的屬性
NSLog(@"hello %f",_weight);
}
/*
注意: 如果分類中 有 和 原有類同名的方法,會(huì)調(diào)用分類中的方法
也就是說會(huì)忽略原有類的方法
注意 : 在開發(fā)中 盡量不要這樣寫
*/
- (void)say
{
NSLog(@"%s",__func__);
}
@end
Person+LYS
>>>.h
#import "Person.h"
@interface Person (LYS)
@end
>>>.m
#import "Person+LYS.h"
@implementation Person (LYS)
// 如果多個(gè)分類中 都有原有類中 同名的方法, 那么調(diào)用該方法的時(shí)候執(zhí)行誰 由編譯器決定
// 會(huì)執(zhí)行 最后一個(gè) 參與編譯的分類中的方法
- (void)say
{
NSLog(@"%s",__func__);
}
@end