NSTimer的使用

一恋拷、初始化

(1)+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;

(2)+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti invocation:(NSInvocation *)invocation repeats:(BOOL)yesOrNo;


(3)+ (NSTimer *)timerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;

(4)+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;

(5)- (instancetype)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)ti target:(id)t selector:(SEL)s userInfo:(nullable id)ui repeats:(BOOL)rep

注意:這五種初始化方法的異同:

1资厉、參數(shù)repeats是指定是否循環(huán)執(zhí)行,YES將循環(huán)蔬顾,NO將只執(zhí)行一次宴偿。

2、timerWithTimeInterval(1)&(3)這兩個(gè)類方法創(chuàng)建出來的對象如果不用 addTimer: forMode方法手動(dòng)加入主循環(huán)池中诀豁,將不會(huì)循環(huán)執(zhí)行窄刘。并且如果不手動(dòng)調(diào)用fire,則定時(shí)器不會(huì)啟動(dòng)且叁。

3都哭、scheduledTimerWithTimeInterval(2)&(4)這兩個(gè)方法不需要手動(dòng)調(diào)用fire,會(huì)自動(dòng)執(zhí)行逞带,并且自動(dòng)加入主循環(huán)池欺矫。

4、init(5)方法需要手動(dòng)加入循環(huán)池展氓,它會(huì)在設(shè)定的啟動(dòng)時(shí)間啟動(dòng)穆趴。

二、成員變量

@property (copy) NSDate *fireDate;

@property (readonly) NSTimeInterval timeInterval;

這個(gè)是一個(gè)只讀屬性遇汞,獲取定時(shí)器調(diào)用間隔時(shí)間未妹。

@property NSTimeInterval tolerance;

這是7.0之后新增的一個(gè)屬性簿废,因?yàn)镹STimer并不完全精準(zhǔn),通過這個(gè)值設(shè)置誤差范圍络它。

@property (readonly, getter=isValid) BOOL valid;

獲取定時(shí)器是否有效

@property (readonly, retain) id userInfo;

獲取參數(shù)信息

三族檬、關(guān)于內(nèi)存釋放

如果我們啟動(dòng)了一個(gè)定時(shí)器,在某個(gè)界面釋放前化戳,將這個(gè)定時(shí)器停止单料,甚至置為nil,都不能是這個(gè)界面釋放点楼,原因是系統(tǒng)的循環(huán)池中還保有這個(gè)對象扫尖。所以我們需要這樣做:

在官方文檔中我們可以看到 [timer invalidate]是唯一的方法將定時(shí)器從循環(huán)池中移除。


四掠廓、關(guān)于NSInvocation

IOS中有一個(gè)類型是SEL,它的作用很相似與函數(shù)指針沉颂,通過 performSelector:withObject:函數(shù)可以直接調(diào)用這個(gè)消息悦污。但是perform相關(guān)的這些函數(shù),有一個(gè)局限性,其參數(shù)數(shù)量不能超過2個(gè)子巾,否則要做很麻煩的處理线梗,與之相對,NSInvocation也是一種消息調(diào)用的方法瘾婿,并且它的參數(shù)沒有限制烤咧。這兩種直接調(diào)用對象消息的方法,在IOS4.0之后笛谦,大多被block結(jié)構(gòu)所取代饥脑,只有在很老的兼容性系統(tǒng)中才會(huì)使用,簡單用法總結(jié)如下:

1灶轰、初始化與調(diào)用

在官方文檔中有明確說明,NSInvocation對象只能使用其類方法來初始化乳附,不可使用alloc/init方法许溅。它執(zhí)行調(diào)用之前秉版,需要設(shè)置兩個(gè)方法:setSelector: 和setArgument:atIndex:

注意:簽名函數(shù)的參數(shù)數(shù)量要和調(diào)用函數(shù)的一致清焕。測試后發(fā)現(xiàn),當(dāng)簽名函數(shù)參數(shù)數(shù)量大于被調(diào)函數(shù)時(shí)滚停,也是沒有問題的键畴。

注意:(1)突雪、這里設(shè)置參數(shù)的Index 需要從2開始咏删,因?yàn)榍皟蓚€(gè)被selector和target占用。下面這樣寫也沒有任何問題:

(2)嘀粱、這里的傳參方式必須是傳遞參數(shù)地址锋叨。

2宛篇、NSInvocation的返回值

NSInvocation對象,是可以有返回值的豌鸡,然而這個(gè)返回值,并不是其所調(diào)用函數(shù)的返回值炉奴,需要我們手動(dòng)設(shè)置:


注意:這里的操作傳遞的都是地址瞻赶。如果是OC對象派任,也是取地址。

3师逸、關(guān)于內(nèi)存

可以注意到- (void)retainArguments;這個(gè)方法篓像,它會(huì)將傳入的所有參數(shù)以及target都retain一遍皿伺。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸵鸥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子养叛,更是在濱河造成了極大的恐慌宰翅,老刑警劉巖汁讼,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘿架,死亡現(xiàn)場離奇詭異啸箫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)蝉娜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來南缓,“玉大人荧呐,你說我怎么就攤上這事倍阐。” “怎么了岔冀?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵楣颠,是天一觀的道長咐蚯。 經(jīng)常有香客問我,道長矫膨,這世上最難降的妖魔是什么期奔? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任呐萌,我火速辦了婚禮,結(jié)果婚禮上罗晕,老公的妹妹穿的比我還像新娘赠堵。我一直安慰自己,他們只是感情好酬屉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布呐萨。 她就那樣靜靜地躺著,像睡著了一般凹髓。 火紅的嫁衣襯著肌膚如雪怯屉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天赌躺,我揣著相機(jī)與錄音羡儿,去河邊找鬼。 笑死缅叠,一個(gè)胖子當(dāng)著我的面吹牛虏冻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厨相,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼庶骄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了单刁?” 一聲冷哼從身側(cè)響起府适,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤细溅,失蹤者是張志新(化名)和其女友劉穎喇聊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體誓篱,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年锦募,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了糠亩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赎线,死狀恐怖垂寥,靈堂內(nèi)的尸體忽然破棺而出另锋,到底是詐尸還是另有隱情,我是刑警寧澤文判,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布台舱,位于F島的核電站,受9級特大地震影響柜去,放射性物質(zhì)發(fā)生泄漏拆宛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一股耽、第九天 我趴在偏房一處隱蔽的房頂上張望钳幅。 院中可真熱鬧,春花似錦诬乞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窗宇,卻和暖如春瞳浦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叫潦。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工矗蕊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朋魔。 一個(gè)月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓卿操,卻偏偏與公主長得像,于是被迫代替她去往敵國和親害淤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評論 2 345

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