目錄:
1、類目
2逛犹、延展
1端辱、類目(類別)Category
1.從定義看類目就是給類來添加一個眼睛??梁剔,哈哈,其實(shí)就是添加方法舞蔽,比如給一個類MyFirstViewController用類目的形式來添加一個方法荣病,調(diào)用這個方法就會打印@“小馬哥真帥!”渗柿,本人添加類目用的是下面這種方式个盆,如果直接在給需要添加類目的類中的.m文件中也是可以的,但是這樣的話用著個人感覺不習(xí)慣朵栖,好了閑話少說下面進(jìn)入正題:
首先新建文件時選擇Objective-C File
之后就有會形成 "MyFirstViewController+Category.h"和"MyFirstViewController+Category.m"的一個類這時我們在類里面添加方法:
.h文件中:
#import "MyFirstViewController.h"
@interface MyFirstViewController (Category)
- (NSString *)myName:(NSString *)string;
@end
.m文件中實(shí)現(xiàn):
#import "MyFirstViewController+Category.h"
@implementation MyFirstViewController (Category)
- (NSString *)myName:(NSString *)string
{
return @"哈哈颊亮!";
}
@end
類目的調(diào)用:
這就是生成了一個類目,調(diào)用十分簡單陨溅;[self myName:@""];就可以啦终惑。是不是很簡單;
下拉刷新控件的調(diào)用就是基于此:
引入頭文件
#import "UIScrollView+MJRefresh.h"http://下拉刷新
只要是UIScrollView或者子類均可直接調(diào)用此方法门扇。
//添加下拉刷新控件
[self.willTableV addHeaderWithCallback:^
{
[self requestWill:@"1" hudStr:nil];
willPage = 1;
}];
類目添加屬性:
一般來說類目是不能添加屬性的雹有,只能添加方法,不行你試試臼寄,直接崩潰了都霸奕;但是什么都沒有一定的,給類目添加屬性也是可以的吉拳,但是需要用到兩個運(yùn)行時的東東质帅;objc_getAssociatedObject和objc_setAssociatedObject,其實(shí)添加的是屬性的set和get方法留攒,并不是成員變量临梗;
在類目的.m文件中:
static char strAddrKey = 'a';
- (NSString *)addr
{
return objc_getAssociatedObject(self, &strAddrKey);
}
- (void)setAddr:(NSString *)addr
{
objc_setAssociatedObject(self, &strAddrKey, addr, OBJC_ASSOCIATION_COPY_NONATOMIC);
}
這樣就OK了,是不是很屌稼跳,其實(shí)用的真心不多盟庞;好了,類目的問題就到此結(jié)束汤善!
2什猖、延展
首先延展既可以給類添加屬性,又可以給類添加方法红淡,其實(shí)就是匿名的類目不狮,但是可不一樣呦,其實(shí)我們創(chuàng)建控制器時.m文件中生成的接口就是:如下在旱,
@interface ViewController (){
}
延展就沒有啥好說的了摇零,就是相當(dāng)于給類添加私有的屬性,成員變量桶蝎,或者方法的驻仅;