項目知識點.Part3

內存管理:

基本數據類型或者Core Foundation對象都沒有引用計數html

主線程會自動建立釋放池,子線程須要手動建立釋放池。數組

具體的區別:http://www.cnblogs.com/langtianya/p/3722129.htmlspa

1. NSString:

retain:始終是淺複製。引用計數每次加一。返回對象是否可變與被複制的對象保持一致。線程


copy:對於可變對象爲深複製,引用計數不改變;對於不可變對象是淺複製,代理

         引用計數每次加一。始終返回一個不可變對象。code


mutableCopy:始終是深複製,引用計數不改變。始終返回一個可變對象。orm

2. NSArray

 

不管是深拷貝仍是淺拷貝,數組的元素都是淺拷貝htm

 

真正的深拷貝:歸檔反歸檔對象

3. return是一個單純的引用計數+1

4. UIButton繼承自:

UIButton繼承於UIControl,UIControl繼承於UIView,UIView沒有內部事件,blog

touchesBegan、touchesMoved touchesEnded  touchesCanclled這四個方法來自於UIView和UIViewController的共同父類:UIResponder

5. 響應者鏈:

硬件檢測到觸摸操做,會將信息交給UIApplication,而後開始檢測。

(1)響應者鏈的查詢過程:首先系統須要肯定是誰點擊/觸摸了屏幕,這個尋找的過程稱爲:hit-test view ,按照這個:UIApplication->UIWindow->UIViewController->UIView(檢測全部的子視圖)順序往下走,知道找到觸摸的UIView ,hitTest:withEvent:返回對應的UIView,這樣就找到了第一響應者,確認了觸摸位置,完成了響應者鏈的查詢過程。

(2)響應者處理觸摸事件:若是第一響應者沒有處理事件,那麼事件會按照:觸摸的子視圖->UIView->UIViewController->UIWindow->UIApplication 順序向下傳遞,若是一直沒有響應者處理,則丟棄觸摸事件。

六、使用Xib:

使用Xib時,是須要註冊的,目前我掌握的有兩種方法:

方法一:

在viewDidLoad方法中進行註冊,在後面的設置cell方法中直接使用。

 

[self.tableView_Recommend registerNib:[UINib nibWithNibName:@"RecommendCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"Recommend_ZN"];

方法二:

在設置cell的時候進行註冊。

 

SingersTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"singerscell"];
        if (cell == nil) {
            cell = (SingersTableViewCell *)[[[NSBundle mainBundle] loadNibNamed:@"SingersTableViewCell" owner:self options:nil] lastObject];
        }

 7.自定義cell:

iOS中最經常使用的就是tableView了吧,一個完整的APP裏面但是須要咱們各類自定義cell的哦~,因此遇到問題也不奇怪了吧。

常常用xib自定義cell,因此總得試一下代碼自定義吧,否則都不會代碼寫了。代碼實現自定義cell時,那麼cell中子控件的frame要怎麼設置呢:

須要用-(void) layoutSubviews 來實現。(方法已經大寫加粗啦~)

 

- (void)layoutSubviews {
    UIView *view_cell = [[UIView alloc] initWithFrame:self.contentView.frame];
    
    view_cell.backgroundColor = [UIColor redColor];
    
    [self.contentView addSubview:view_cell];
}

 

而 這個-(void) layoutSubviews方法在什麼狀況下會調用呢,當咱們在某個類的內部調整子視圖位置時,就會調用。要是寫在-(instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier方法裏,那麼當你在 tableView的代理方法中返回cell的高度時,並不會修改子控件的大小,本寶寶這樣寫的,就出現了這樣的問題。

八、tableview的頭視圖

設置tableView的頭視圖的時候須要:self.tableView.tableHeaderView = view(本身建立的視圖)

tableView 的頭視圖也涉及到重用機制,與cell同樣。 

九、日期轉換爲字符串:

NSString *date = [dateFormatter stringFromDate:[NSDate date]];

 十、修改UIImageView的顏色:

self.myImageView.image = [[UIImage imageNamed:@"1.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

  self.myImageView.tintColor  = [UIColor redColor];

對,就是這樣,就是把UIImageView的渲染方式設置爲:UIImageRenderingModeAlwaysTemplate  而後修改tintColor就能夠了。

若是其餘小夥伴對我寫的這篇文章有什麼異議,請儘快聯繫我哦~  方便我修改嘛

相關文章
相關標籤/搜索