ios 類目(類別),延展(擴展),代理的區(qū)別

轉(zhuǎn)載自明成偉俊

一、首先類目(類別)Category
  1. 從定義看類目就是給類來添加一個眼睛??,哈哈,其實就是添加方法,比如給一個類MyFirstViewController用類目的形式來添加一個方法,調(diào)用這個方法就會打印@“小江哥真帥!”,本人添加類目用的是下面這種方式,如果直接在給需要添加類目的類中的.m文件中也是可以的,但是這樣的話用著個人感覺不習(xí)慣,好了閑話少說下面進入正題:
    圖1

    之后就有會形成"MyFirstViewController+Category.h""MyFirstViewController+Category.m"的一個類這時我們在類里面添加方法:
    .h文件中:
#import "MyFirstViewController.h"

@interface MyFirstViewController (Category)

- (NSString *)myName:(NSString *)string;
@end

.m文件中實現(xiàn):
#import "MyFirstViewController+Category.h"
@implementation MyFirstViewController (Category)

- (NSString *)myName:(NSString *)string{

   return @"小馬哥最帥!";
}

@end

這就是生成了一個類目,調(diào)用十分簡單;[self myName:@""];就可以啦。是不是很簡單;
注:一般來說類目是不能添加屬性的,只能添加方法,不行你試試,直接崩潰了都;但是什么都沒有一定的,給類目添加屬性也是可以的,但是需要用到兩個運行時的東東;*objc_getAssociatedObject*objc_setAssociatedObject,其實添加的是屬性的setget方法,并不是成員變量;
在類目的.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了,是不是很屌,其實用的真心不多;好了,類目的問題就到此結(jié)束!

二、延展(Extension)

首先延展既可以給類添加屬性,又可以給類添加方法,其實就是匿名的類目,但是可不一樣呦,其實我們創(chuàng)建控制器時.m文件中生成的接口就是:如下,

@interface ViewController (){
  }

延展就沒有啥好說的了,就是相當(dāng)于給類添加私有的屬性,成員變量,或者方法的;

三、代理協(xié)議(protocol

代理我們項目中用的太多了,不想說了,很簡單;需要注意的是代理也可以添加屬性的;protocol 中使用 property 只會生成 settergetter 方法聲明,我們使用屬性的目的,是希望遵守我協(xié)議的對象能實現(xiàn)該屬性;
本文完!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,072評論 0 9
  • 你還發(fā)朋友圈嘛?我不發(fā)了!哦!是嗎! 慢慢地,不知是朋友圈里的人越來越多? 生活中的人們越來越不習(xí)慣說真實的想法,...
    米芬閱讀 878評論 0 3
  • 我其實是一個極其害怕尷尬和冒犯別人的人,所以有時候明知道這個問題要問,但是由于擔(dān)心冒犯,有時候繞彎子,有時候就不問...
    水波縈紆閱讀 441評論 0 0
  • 秋天的風(fēng)是清涼的,像沉淀的人生,不再浮躁,在品味名利與得失后淡泊一切。秋天的流水是清澈的,像歷經(jīng)風(fēng)雨的智者,收斂了...
    3f4a1edff067閱讀 295評論 0 1
  • 于提拉米蘇的由來,有一個溫馨的故事:二戰(zhàn)時期,一個意大利士兵要出征了,可是家里已經(jīng)什么也沒有了,愛他的妻子為了給他...
    白圖閱讀 405評論 0 0

友情鏈接更多精彩內(nèi)容