中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iPhone開發重構:提取公用的方法以清理重復代碼

發布時間:2020-04-23 13:50:25 來源:網絡 閱讀:1216 作者:benjielin 欄目:開發技術

     無論在iPhone開發還是學習的過程中都會看到一些不是很理想的代碼,不可否認自己也在不斷“貢獻”著這類代碼。面對一些代碼的“壞味道”,重構顯然是個有效的解決途徑。《iPhone開發重構》系列就想總結和補充iPhone開發中經歷的一些重構,其間可能會引用一些開源以及實際項目的代碼,本著對技術的探求,冒昧之處還請作者多多見諒。

 

   代碼重復是一個比較明顯的“壞味道”,提取公用的方法就是解決的途徑之一。iPhone開發中,使用UITableView的時候就有如下一段“經典”的模板代碼,因為這是項目模板自動生成的,所以很多人就自然接受了。但隨著越來越多地通過copy&paste在一個項目中使用這段代碼,大家是否有些采取行動的壓力呢?好吧,我們就從這“動刀”吧!

 

重構前:

- (UITableViewCell *)tableView:(UITableView *)tv cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"wikiHowCell";
    UITableViewCell *cell = (WHTableViewCell *)[tv dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[WHTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
    }
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.title = [[featuredArticles objectAtIndex:indexPath.row] objectForKey:@"title"];
    return cell;
}

 

   對此我們可以提取個公共的方法,并放置在一個適當的地方。UITableViewCell的Category應該是一個比較好的去處。重構后提取的方法以及實際調用的代碼如下:

重構后:

@implementation UITableViewCell(Cache)

+ (id)dequeOrCreateInTable:(UITableView*)tableView withId: (NSString*)reuseId andStyle:(UITableViewCellStyle)style {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:style reuseIdentifier:reuseId] autorelease];
    }
    return cell;
}

@end

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [UITableViewCell dequeOrCreateInTable:tableView withId:@"wikiHowCell" andStyle:UITableViewCellStyleDefault];
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
    cell.title = [[featuredArticles objectAtIndex:indexPath.row] objectForKey:@"title"];
    return cell;
}

   從代碼量衡量,僅從此處可能感覺重構前后變化不大,甚至還會略有增多。但如果考慮到公用方法的多次使用產生的“效益”,付出的努力應該是值當的!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尖扎县| 元谋县| 高雄市| 同仁县| 山阴县| 上思县| 隆安县| 诏安县| 区。| 黔江区| 肇州县| 景泰县| 久治县| 长丰县| 华池县| 汪清县| 信阳市| 桂平市| 白银市| 句容市| 崇州市| 开阳县| 镇原县| 浪卡子县| 信宜市| 德昌县| 隆安县| 玛曲县| 红河县| 曲麻莱县| 镇雄县| 武胜县| 西华县| 安福县| 海林市| 乌鲁木齐市| 亚东县| 白河县| 顺平县| 东兴市| 乌拉特后旗|