iOS 跟進(jìn)項(xiàng)目發(fā)現(xiàn)的小問題

跟進(jìn)項(xiàng)目發(fā)現(xiàn)的小問題

這兩天再跟進(jìn)小需求,正好趕上項(xiàng)目要重構(gòu)器钟,記錄一下小細(xì)節(jié)……

應(yīng)用前后臺(tái)標(biāo)記

typedef NS_ENUM(NSInteger, UIApplicationState) {
    UIApplicationStateActive,
    UIApplicationStateInactive,
    UIApplicationStateBackground
} NS_ENUM_AVAILABLE_IOS(4_0);

就可以記錄App的狀態(tài)津坑,不用在Appdelegate里面做各種標(biāo)記,比如:

@interface AppDelegate ()

@property (nonatomic, getter=isForeground) BOOL foreground;

此處使用foreground來標(biāo)記應(yīng)用是否在前后臺(tái)傲霸,然后當(dāng)應(yīng)用前后臺(tái)切換的時(shí)候設(shè)施這個(gè)bool

***本地化存儲(chǔ)****

使用 NSUserDefaults 應(yīng)該單獨(dú)寫一個(gè)類疆瑰,全局都從這個(gè)類去存儲(chǔ)眉反。
現(xiàn)在隨便寫隨便調(diào)用,命名也不規(guī)范穆役,有使用宏來定義key,有使用static來定義key. NSUserDefaults 本質(zhì)是一個(gè)plist,所以不應(yīng)該存儲(chǔ)image這樣子的大數(shù)據(jù)寸五。

內(nèi)存存儲(chǔ),也應(yīng)該全局統(tǒng)一提供接口耿币,比如使用NSCache或者NSDictionery

UIAlertView

因?yàn)楫a(chǎn)品近期提出了很多類似于 UIAlertView 彈出順序的問題梳杏,比如:要連著彈出很多個(gè)UIAlertView,但是他們都在不同的模塊淹接,但是有優(yōu)先級十性,觸發(fā)的時(shí)機(jī)有可能是通知有可能是用戶操作等等。

類似前面的東東塑悼,UIAlertView 的彈出也應(yīng)該全局統(tǒng)一處理劲适,做一個(gè)隊(duì)列,提供先進(jìn)先出厢蒜,和優(yōu)先級的彈出策略霞势。

觸摸狀態(tài)欄兼砖,UIScrollView滾動(dòng)到頂部的策略
不應(yīng)該在 appdelegate中重寫如下方法

#pragma mark - StatusBar
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [super touchesBegan:touches withEvent:event];
    CGPoint location = [[[event allTouches] anyObject] locationInView:[self window]];
    CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;
    
    if (CGRectContainsPoint(statusBarFrame, location)) {
        [[NSNotificationCenter defaultCenter] postNotificationName:ptv_notificationStatusBarTappedKey object:nil];
    }
}

然后在有 UIScrollView 或者 UIScrollView子類的頁面中監(jiān)聽通知去實(shí)現(xiàn)苗膝,如果一個(gè)頁面的 UIScrollView 太多问慎,導(dǎo)致點(diǎn)擊狀態(tài)欄沒有辦法滾動(dòng)到頂部刁卜,應(yīng)該去實(shí)現(xiàn) UIScrollView的代理方法。

比如:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
    if ([_outerDelegate respondsToSelector:_cmd]) {
        return [_outerDelegate scrollViewShouldScrollToTop:scrollView];
    }
    return YES;
}

不需要滾動(dòng)的view返回NO,一個(gè)頁面保證一個(gè) UIScrollView 足矣]赫掂僵!

SDWebImage使用問題

- (void)configSDWebimage {
    /**
     *  由于遠(yuǎn)程圖片為高分辨率豌熄,為了減少內(nèi)存大量飆升嘱巾,加入非解壓的方法來控制嘴纺,限制緩存
     */
    [[SDWebImageDownloader sharedDownloader] setShouldDecompressImages:NO];

圖片下載后在非主線程解壓然后展示在主線程是優(yōu)化流暢度的一個(gè)重要手法,這也是sd設(shè)置這個(gè)默認(rèn)為YES的重要原因浓冒。

吧啦吧啦,圖片高分辨率尖坤,遠(yuǎn)程……應(yīng)該能知道哪些頁面是所謂高分辨率稳懒,然后單獨(dú)做設(shè)置。慢味。

比如:

1场梆、首先在封裝的控制器中定義變量用于存儲(chǔ)原設(shè)置:

static BOOL SDImageCacheOldShouldDecompressImages = YES;
static BOOL SDImagedownloderOldShouldDecompressImages = YES;

2、loadView中保存原設(shè)置并且禁用解壓縮:

SDImageCache *canche = [SDImageCache sharedImageCache];
SDImageCacheOldShouldDecompressImages = canche.shouldDecompressImages;
canche.shouldDecompressImages = NO;

SDWebImageDownloader *downloder = [SDWebImageDownloader sharedDownloader];
SDImagedownloderOldShouldDecompressImages = downloder.shouldDecompressImages;
downloder.shouldDecompressImages = NO;

3纯路、dealloc中恢復(fù)原設(shè)置:

-(void)dealloc {
    SDImageCache *canche = [SDImageCache sharedImageCache];
    canche.shouldDecompressImages = SDImageCacheOldShouldDecompressImages;
    
    SDWebImageDownloader *downloder = [SDWebImageDownloader sharedDownloader];
    downloder.shouldDecompressImages = SDImagedownloderOldShouldDecompressImages;
}

蘋果也有給出高清大圖的Demo. Large Image Downsizing

總之或油,不應(yīng)該為了預(yù)防性節(jié)省內(nèi)存,犧牲流暢度等用戶體驗(yàn)驰唬。

集中打點(diǎn)的問題
現(xiàn)在項(xiàng)目中的打點(diǎn)如下方式

[[DDStatistics sharedInstance] remindDDMessageID:dictionary[@"push_id"]
                                                      roomID:roomId
                                                      Status:@"3"];

DDStatistics這個(gè)模塊在整個(gè)項(xiàng)目中有飄來飄去顶岸,建議引入切面編程的方式使用配置文件打點(diǎn)腔彰,比如引入 aspect.

某日,產(chǎn)品經(jīng)理讓我找找某個(gè)點(diǎn)在哪里打的辖佣,比如霹抛,10086這個(gè)點(diǎn)是哪里的,我就這樣子卷谈,全局搜索10086杯拐,我擦,木有世蔗,算了全局搜索 DDStatistics 我擦端逼,還是木有,最后各種排查污淋,發(fā)現(xiàn)是傳入的某個(gè)函數(shù)的參數(shù)顶滩。巴拉巴拉。芙沥。诲祸。

關(guān)于get函數(shù)的職責(zé)

get函數(shù),我覺得應(yīng)該只做和需要get對象相關(guān)的事情而昨,不應(yīng)該做其他的事情救氯,不如,在get函數(shù)里歌憨,把view添加到superView上着憨。

原因有很多,不羅列了务嫡,

GCD使用規(guī)范
類似這種

- (void)updateEnterForeground {
    dispatch_async(dispatch_get_main_queue(), ^{
        self.foreground = YES;
    });
}

updateEnterForeground這個(gè)函數(shù)大部分情況都是在主線程的甲抖,為什么內(nèi)部直接使用這個(gè)。心铃。
有時(shí)候這么做會(huì)延長對象生命周期准谚!,建議性做法類似其他第三方庫的:

#ifndef dispatch_main_async_safe
#define dispatch_main_async_safe(block)\
    if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(dispatch_get_main_queue())) == 0) {\
        block();\
    } else {\
        dispatch_async(dispatch_get_main_queue(), block);\
    }
#endif

what ever ,this is safe!!

未完去扣,待續(xù)柱衔,巴拉巴拉

一個(gè)架構(gòu)師的成長哈哈哈哈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市愉棱,隨后出現(xiàn)的幾起案子唆铐,更是在濱河造成了極大的恐慌,老刑警劉巖奔滑,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件艾岂,死亡現(xiàn)場離奇詭異,居然都是意外死亡朋其,警方通過查閱死者的電腦和手機(jī)王浴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門脆炎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叼耙,你說我怎么就攤上這事腕窥。” “怎么了筛婉?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵簇爆,是天一觀的道長。 經(jīng)常有香客問我爽撒,道長入蛆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任硕勿,我火速辦了婚禮哨毁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘源武。我一直安慰自己扼褪,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布粱栖。 她就那樣靜靜地躺著话浇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闹究。 梳的紋絲不亂的頭發(fā)上幔崖,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音渣淤,去河邊找鬼赏寇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛价认,可吹牛的內(nèi)容都是我干的嗅定。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼用踩,長吁一口氣:“原來是場噩夢啊……” “哼露戒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捶箱,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎动漾,沒想到半個(gè)月后丁屎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旱眯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年晨川,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了证九。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,626評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡共虑,死狀恐怖愧怜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妈拌,我是刑警寧澤拥坛,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站尘分,受9級特大地震影響猜惋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜培愁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一著摔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧定续,春花似錦谍咆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庇茫,卻和暖如春港粱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背旦签。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工查坪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宁炫。 一個(gè)月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓偿曙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羔巢。 傳聞我的和親對象是個(gè)殘疾皇子望忆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評論 2 348

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

  • 非原創(chuàng),收集竿秆,整理启摄,覺得有用就羅列下為避免下次犯迷糊。 IOS 中的 AppDelegate.m/h 文件是很重要...
    西蜀閱讀 525評論 0 0
  • 花開香雪好運(yùn)來幽钢,山丹丹流彩歉备。夕陽悅悅紅頂戴,晚霞茵茵訴情懷匪燕,自豪邁蕾羊! 歡歌笑語心境開喧笔,風(fēng)悄悄采摘,香花肆意心不改龟再,...
    曦微w行走在路上閱讀 640評論 0 6
  • 1今天練習(xí)了手法书闸,明白所有付出都會(huì)有回報(bào)。 2自己要多做顧客利凑,多告訴顧客身體的問題才能讓顧客更加清楚自身的問題浆劲。 ...
    青心爭己閱讀 701評論 0 0
  • 最近在研究jenkins,因在研究階段截碴,所有不敢用公司的svn梳侨,所以只好自己動(dòng)手操作了,對于打包工具來說日丹,我是小白...
    草中人閱讀 626評論 0 0
  • 今天再次踏上1485次列車走哺,心情無比復(fù)雜。上次有爸媽的陪伴哲虾,這次只有熟識(shí)的同齡人與我同行丙躏。沒有別人的幫助,一...
    G_Jane閱讀 372評論 0 0