iOS中分類(category)的使用

分類(category)

  • 分類是為了擴展系統(tǒng)類的方法而產(chǎn)生的一種方式。

  • 分類的作用就是在不修改原有類的基礎(chǔ)上籍救,為一個類擴展方法,最主要的是可以給系統(tǒng)類擴展我們自己定義的方法。

  • 分類中可以訪問原來類的成員變量鼠次,但只能訪問@protect和@public形式的變量。

  • 如果要給分類添加成員變量芋齿,則需要寫變量的get腥寇、set方法,否則添加的成員變量無法被調(diào)用觅捆。

  • 需注意一下命名分類命名赦役,如果項目中是給這個類的某些功能寫個分類,那么分類的命名最好不好直接命名為category栅炒。比如有一個Person類掂摔,意思是人類,在person類中我們有一個方法赢赊,-(void)eat;意義是吃乙漓。因為每個人類都會吃,人類有很多共同特點释移,但是也有很多不同點叭披,比如,并不是每個人都會踢足球秀鞭,這時候我寫一個分類趋观,給喜歡運動的人,這個分類的名字叫做sport锋边。因為是Person類的分類皱坛,你會看到生成的名字叫做Person+sport。

  • 如果給一個類定義了兩個分類豆巨,這兩個分類中分別實現(xiàn)了同樣的一個方法剩辟,調(diào)用方法時候,這兩個方法都會被執(zhí)行往扔,所以盡量避免這樣的情況出現(xiàn)是正解贩猎。

  • 使用分類時需引入分類頭文件。

使用(以UIView為例)

1萍膛、創(chuàng)建一個分類

(1)Cmd+N吭服,iOS-->Objective-C File,Next蝗罗;
(2)File Type選擇category艇棕,class選擇需要的類蝌戒,分類名,Next沼琉。

2北苟、分類文件

這是給UIView的frame寫的一個分類

#import <UIKit/UIKit.h>

@interface UIView (Frame)

//添加的成員變量
@property CGFloat origin_x;
@property CGFloat origin_y;

@property CGFloat width;
@property CGFloat height;

//擴展的方法
/**
 *  @author MX, 16-05-29 15:05:22
 *
 *  位移(根據(jù)center移動)
 *
 *  @param point
 */
- (void)moveTo:(CGPoint) point;
/**
 *  @author MX, 16-05-29 15:05:27
 *
 *  指定比率放大或者縮小
 *
 *  @param scale    指定的比率
 */
- (void)scaleBy:(CGFloat) scale;

@end
#import "UIView+Frame.h"

@implementation UIView (Frame)

@dynamic origin_x;
@dynamic origin_y;
@dynamic width;
@dynamic height;

//實現(xiàn)set、get方法
- (CGFloat)origin_x
{
    return self.frame.origin.x;
}
- (CGFloat)origin_y
{
    return self.frame.origin.y;
}
- (CGFloat)width
{
    return self.frame.size.width;
}
- (CGFloat)height
{
    return self.frame.size.height;
}
- (CGFloat)toLeftMargin
{
    return self.frame.origin.x+self.frame.size.width;
}
- (CGFloat)toTopMargin
{
    return self.frame.origin.y+self.frame.size.height;
}


- (void)setWidth:(CGFloat)width
{   
    if (width != self.frame.size.width) {
        CGRect newframe = self.frame;
        newframe.size.width = width;
        self.frame = newframe;
    }
}
- (void)setHeight:(CGFloat)height
{  
    if (height != self.frame.size.height)
    {
        CGRect newframe = self.frame;
        newframe.size.height = height;
        self.frame = newframe;
    }
}
- (void)setOrigin_x:(CGFloat)origin_x
{  
    if (origin_x != self.frame.origin.x)
    {
        CGRect newframe = self.frame;
        newframe.origin.x = origin_x;
        self.frame = newframe;
    }
}
- (void)setOrigin_y:(CGFloat)origin_y
{   
    if (origin_y != self.frame.origin.y)
    {
        CGRect newframe = self.frame;
        newframe.origin.y = origin_y;
        self.frame = newframe;
    }
}

#pragma mark 擴展的方法
- (void)moveTo:(CGPoint) point
{
    if ((self.center.x != point.x) || (self.center.y != point.y))
    {
        [UIView animateWithDuration:.3 animations:^{
            CGPoint newCenter = self.center;
            newCenter.x += point.x;
            newCenter.y += point.y;
            self.center = newCenter;
        }];
    }
}
- (void)scaleBy:(CGFloat) scale
{
    if (scale >0 && scale != 1)
    {
        [UIView animateWithDuration:.3 animations:^{
            CGRect newframe = self.frame;
            newframe.size.width *= scale;
            newframe.size.height *= scale;
            self.frame = newframe;
        }];
    }
}

@end

上面對于UIView寫的分類打瘪,添加了成員變量友鼻,而且擴展了UIView類的方法。

最后

參考文檔:http://www.cocoachina.com/ios/20161018/17784.html
這里總結(jié)了一些經(jīng)常用的分類https://github.com/Mexiang/category闺骚,都是簡單經(jīng)常用的方法彩扔,會持續(xù)總結(jié)更新github。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葛碧,一起剝皮案震驚了整個濱河市借杰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌进泼,老刑警劉巖蔗衡,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乳绕,居然都是意外死亡绞惦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門洋措,熙熙樓的掌柜王于貴愁眉苦臉地迎上來济蝉,“玉大人,你說我怎么就攤上這事菠发⊥趼耍” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵滓鸠,是天一觀的道長雁乡。 經(jīng)常有香客問我,道長糜俗,這世上最難降的妖魔是什么踱稍? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮悠抹,結(jié)果婚禮上珠月,老公的妹妹穿的比我還像新娘。我一直安慰自己楔敌,他們只是感情好啤挎,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著卵凑,像睡著了一般侵浸。 火紅的嫁衣襯著肌膚如雪旺韭。 梳的紋絲不亂的頭發(fā)上氛谜,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天掏觉,我揣著相機與錄音,去河邊找鬼值漫。 笑死澳腹,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的杨何。 我是一名探鬼主播酱塔,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼危虱!你這毒婦竟也來了羊娃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤埃跷,失蹤者是張志新(化名)和其女友劉穎蕊玷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弥雹,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡垃帅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剪勿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贸诚。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖厕吉,靈堂內(nèi)的尸體忽然破棺而出酱固,到底是詐尸還是另有隱情,我是刑警寧澤头朱,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布运悲,位于F島的核電站,受9級特大地震影響髓窜,放射性物質(zhì)發(fā)生泄漏扇苞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一寄纵、第九天 我趴在偏房一處隱蔽的房頂上張望鳖敷。 院中可真熱鬧,春花似錦程拭、人聲如沸定踱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽崖媚。三九已至亦歉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間畅哑,已是汗流浹背肴楷。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠呐,地道東北人赛蔫。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像泥张,于是被迫代替她去往敵國和親呵恢。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容