類方法與實(shí)例方法 句旱、self有什么不同

Objective-C里面既有實(shí)例方法也類方法。類方法(Class Method) 有時(shí)被稱為工廠方法(Factory Method)或者方便方法(Convenience method)懦窘。工廠方法的稱謂明顯和一般意義上的工廠方法不同前翎,從本質(zhì)上來(lái)說(shuō)稚配,類方法可以獨(dú)立于對(duì)象而執(zhí)行畅涂,所以在其他的語(yǔ)言里面類方法有的時(shí)候被稱為靜態(tài)方法。
注意點(diǎn)一:類方法
1道川,類方法可以調(diào)用類方法午衰。
2立宜,類方法不可以調(diào)用實(shí)例方法,但是類方法可以通過(guò)創(chuàng)建對(duì)象來(lái)訪問(wèn)實(shí)例方法臊岸。
3橙数,類方法不可以使用實(shí)例變量。類方法可以使用self帅戒,因?yàn)閟elf不是實(shí)例變量灯帮。
4,類方法作為消息逻住,可以被發(fā)送到類或者對(duì)象里面去(實(shí)際上钟哥,就是可以通過(guò)類或者對(duì)象調(diào)用類方法的意思)。
注意點(diǎn)二:self的規(guī)則
大家需要記住下面的規(guī)則:
1瞎访,實(shí)例方法里面的self腻贰,是對(duì)象的首地址。
2扒秸,類方法里面的self播演,是Class.
盡管在同一個(gè)類里面的使用self,但是self卻有著不同的解讀伴奥。在類方法里面的self写烤,可以翻譯成class self;在實(shí)例方法里面的self拾徙,應(yīng)該被翻譯成為object self顶霞。在類方法里面的self和實(shí)例方法里面的self有著本質(zhì)上的不同,盡管他們的名字都叫self锣吼。

類方法創(chuàng)造的對(duì)象要不要用release釋放选浑?
答 不需要 這個(gè)對(duì)象被放到自動(dòng)釋放池中

Object-C中的私有方法和私有成員變量

成員變量默認(rèn)對(duì)內(nèi)是共有的,對(duì)外是私有的玄叠。

@interface Controller : NSObject
{

@private: NSString *something;
}

  • (void)thisIsAStaticMethod;
  • (void)thisIsAnInstanceMethod;
    @end

@interface Controller (Private)

  • (void)thisIsAPrivateMethod;
    @end
    下面的代碼就是怎樣獲取私有變量(記得加頭文件#import ):
    NSString *str;
    Mobj *obj = [[Mobj alloc] init];
    object_getInstanceVariable(obj, "mt_", (void *)&str);
    NSLog(@"%@",str);
    [obj release];

//===================================
IOS實(shí)例方法和類方法的區(qū)別
類方法和實(shí)例方法
1:實(shí)例方法是— 類開頭是+ 實(shí)例方法是用實(shí)例對(duì)象訪問(wèn)古徒,類方法的對(duì)象是類而不是實(shí)例,通常創(chuàng)建對(duì)象或者工具類读恃。
在實(shí)例方法里隧膘,根據(jù)繼承原理發(fā)送消息給self和super其實(shí)都是發(fā)送給self
在類方法里面self是其他的類的類方法,在類方法中給self發(fā)送消息只能發(fā)類方法self是類super也是
什么時(shí)候用類方法寺惫,要?jiǎng)?chuàng)建一個(gè)實(shí)例時(shí)候獲取一個(gè)共享實(shí)例疹吃,或者獲取關(guān)于類的一些共有信息
2:
類方法(class method)和實(shí)例方法(instance method)。類方法被限定在類范圍內(nèi)西雀,不能被類的實(shí)例調(diào)用(即脫離實(shí)例運(yùn)行)萨驶。alloc就是一種類方法。實(shí)例方法限定在對(duì)象實(shí)例的范圍內(nèi)(即實(shí)例化之前不能運(yùn)行)艇肴。init就是一種實(shí)例方法腔呜,被alloc方法返回的對(duì)象實(shí)例調(diào)用叁温。

NSObject * object1 = [[NSObject alloc] init];
instance method 以減號(hào) "-" 開頭
class method 以加號(hào) “+” 開頭,相當(dāng)于static方法
3:see see 更健康
Objective-C

1.OC是一門基于C的面向?qū)ο笳Z(yǔ)言核畴,是C語(yǔ)言的一個(gè)超集膝但,同時(shí)具有C語(yǔ)言的特征

2.OC對(duì)類的定義和實(shí)現(xiàn)以及初始化

//聲明類接口,繼承NSObject對(duì)象(該對(duì)象是OC中所有類的頂級(jí)父類谤草,所有類都繼承于它)

@interface ClassName :NSObject

//成員屬性和成員函數(shù)的聲明

+(void)function跟束;//類方法,不需要實(shí)例化對(duì)象就可以調(diào)用的方法

  • (void)function2 :(NSString *)arg丑孩;//成員方法泳炉,必須通過(guò)實(shí)例化的對(duì)象調(diào)用

@end

//實(shí)現(xiàn)類

@imlementation ClassName

//成員屬性初始化和方法的定義

@end

對(duì)象的初始化:ClassName *obj = [[ClassName alloc] init]

OC中以消息機(jī)制傳遞信息,發(fā)送alloc消息給類分配內(nèi)存空間嚎杨,發(fā)送init消息生成對(duì)象花鹅,指針指向?qū)ο蟊旧怼?/p>

3.類方法的調(diào)用

[obj function];

NSString *str = [NSString stringWithString:@"hello"];

[obj function2 : str];

4.輸出函數(shù)

根據(jù)不同的輸出格式輸出不同的值 (%d :整形 枫浙,%@:對(duì)象<發(fā)送description消息>刨肃,%s:字符串)

NSlog(@“The result is %d”,intNum);

CF代表Core Foundation (Cocoa)

CFShow發(fā)送description給它顯示的對(duì)象,CFShow打印的信息不會(huì)顯示時(shí)間戳箩帚,NSLog會(huì)顯示真友,同時(shí)CFShow不需要格式字符 串,它只能用于對(duì)象

CFShow(obj);

5.屬性

支持點(diǎn)表示法:myTableViewCell.textLabel.text = @"hello" 等價(jià)于 [[myTableViewCell textLabel] setText:@"hello"];

使用屬性生成器 property

在h文件中聲明: @property int year

在m文件中合成生成器:@synthesize year

使用 obj.year = 1999 相當(dāng)于調(diào)用了 [obj setYear:1999];

可以自定義取值方法和賦值方法(getter and setter)

-(int)year

{

return year;

}

  • (void) setYear : (int) newYear

{

//此處添加了一些基本的內(nèi)存管理方法紧帕,保留新的值盔然,釋放以前的值

if(newYear != year)

{

[year release];

year = [newYear retain];

}

}

也可以繞過(guò)oc的命名約定,自己指定getter和setter方法的名稱是嗜;

@property(getter = isExist,setter = setExist:) BOOL exist;

@synthesize exist;

使用過(guò)程中既可以使用新定義的方法名愈案,也可以使用以前的方法(點(diǎn)表示法)

屬性的特性:readwrite readonly assign retain copy nonatomic

assign:默認(rèn)行為,使用@property int year就使用了assign行為鹅搪,就是給實(shí)例變量賦了一個(gè)值

retain:實(shí)現(xiàn)了兩個(gè)功能站绪,一個(gè)是保留了賦值時(shí)傳遞的對(duì)象,其次是賦值前釋放了以前值丽柿,使用retain可以實(shí)現(xiàn)上面討論的內(nèi)存管理的優(yōu)點(diǎn)恢准,使用時(shí)加上 @property (retain)int year;

copy:發(fā)送一條復(fù)制的消息給被傳遞的對(duì)象甫题,保留它馁筐,并釋放任何以前的值;

nonactomic:非原子訪問(wèn)器坠非,加上后可以提升訪問(wèn)速度敏沉,但當(dāng)兩個(gè)線程同時(shí)修改同一個(gè)屬性時(shí)就會(huì)出現(xiàn)問(wèn)題,原子屬性可以保證屬性在被一個(gè)線程使用時(shí)不被另一個(gè)線程訪問(wèn),不存在atomic關(guān)鍵字赦抖,默認(rèn)情況下舱卡,所有方法都是自動(dòng)合成的辅肾。(類似與Java中的線程鎖機(jī)制synchronized)

readwrite:可讀寫

readonly:只讀

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末队萤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子矫钓,更是在濱河造成了極大的恐慌要尔,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件新娜,死亡現(xiàn)場(chǎng)離奇詭異赵辕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)概龄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門还惠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人私杜,你說(shuō)我怎么就攤上這事蚕键。” “怎么了衰粹?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵锣光,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我铝耻,道長(zhǎng)誊爹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任瓢捉,我火速辦了婚禮频丘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘泡态。我一直安慰自己椎镣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布兽赁。 她就那樣靜靜地躺著状答,像睡著了一般。 火紅的嫁衣襯著肌膚如雪刀崖。 梳的紋絲不亂的頭發(fā)上惊科,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音亮钦,去河邊找鬼馆截。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜡娶。 我是一名探鬼主播混卵,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窖张!你這毒婦竟也來(lái)了幕随?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤宿接,失蹤者是張志新(化名)和其女友劉穎赘淮,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦霎,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梢卸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了副女。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛤高。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碑幅,靈堂內(nèi)的尸體忽然破棺而出戴陡,到底是詐尸還是另有隱情,我是刑警寧澤枕赵,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布猜欺,位于F島的核電站,受9級(jí)特大地震影響拷窜,放射性物質(zhì)發(fā)生泄漏开皿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一篮昧、第九天 我趴在偏房一處隱蔽的房頂上張望赋荆。 院中可真熱鬧,春花似錦懊昨、人聲如沸窄潭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嫉你。三九已至,卻和暖如春躏惋,著一層夾襖步出監(jiān)牢的瞬間幽污,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工簿姨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留距误,地道東北人簸搞。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像准潭,于是被迫代替她去往敵國(guó)和親趁俊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉刑然,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,715評(píng)論 0 9
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法寺擂,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法闰集,繼承相關(guān)的語(yǔ)法沽讹,異常的語(yǔ)法般卑,線程的語(yǔ)...
    子非魚_t_閱讀 31,632評(píng)論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理武鲁,服務(wù)發(fā)現(xiàn),斷路器蝠检,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 決策樹是將多個(gè)條件進(jìn)行羅列沐鼠,每一層都有一個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)輸出叹谁,構(gòu)成決策樹饲梭,從而得到?jīng)Q策的最優(yōu)值。 ...
    自如得己閱讀 269評(píng)論 0 0
  • 我們每個(gè)人兜叨,從出生那一刻起,就被教導(dǎo)是與眾不同的衩侥,我們也堅(jiān)信這一點(diǎn)国旷,抱著這種觀念生活。 我們堅(jiān)信自己有一種特殊的才...
    張嘉豪sky閱讀 2,221評(píng)論 8 7