流水佈局與block深刻研究

9.  自定義流水佈局

           9.0UICollectionView與UItableView的區別:在佈局(UItableView繼承UISorllView),UICollectionView不用設置contentSize
           9.0UICollectionView與UItableView的相同點:循環利用
   
           9.1.0UICollectionView注意點:1.初始化必需要傳入佈局,(流水佈局:九宮格佈局)2.UICollectionViewCell必須註冊3.必須自定義cell
           9.1.1建立流水佈局:尺寸itemSize(item至關與cell),滾動方向scrollD,額外滾動區域sectionI,行間距mini這是設置流水佈局內部的
           9.1.2建立UICollectionView,設置尺寸,加載NIB設置背景顏色,自定義cell給cell添加一個UIImage屬性

           9.2自定義UICollectionView的佈局,瞭解5個方法
            
                1.-(void)prepareLayout(做用:計算全部的cell佈局,條件:cell佈局固定,調用時刻:一開始佈局時與UICollectionView刷新的時候會調用)
                2.-(nullable NSA<__kindof):(CGRect)rect(做用:返回每一個cell佈局,容許一次性返回全部的cell佈局)
                3.-(BOOL)shouldI:()newBounds(是否容許在拖動的時候新佈局)
                4.-(CGPoint)target offset:(CGPoint)velocity(做用返回最終的偏移量,調用時刻:手指離開時)
       5.-(CGSize)collectionView(做用:設置collectionV滾動範圍)
            9.2.1能夠給居中的圖片方大
                1.在第2中方法設置距離中心越近越大尺寸
                2.在第4種方法設置那張照片離中心越近就自動把那張照片放在中心.
 10.block深刻研究

            10.0關於代理,modal要傳值給vc,要拿到vc對象,讓vc成爲modal的代理,後根據代理方法傳值
            10.1block的基本使用:保存一段代碼,並非立刻執行,須要手動調用  inLineBlock快速生成block代碼
            10.2block4種使用方式: 經過block();調用
                   1.block聲明:返回值(^Block變量名)(block參數類型),參數變量名能夠省略
                   void(^block2)()或void(^block1)(int);
                   2.block定義:等號右邊^(參數 參數變量名){}(有參無返回值)
                   void(^block2)(int a) = ^(int a){};
                   3.block定義二:等號右邊^返回值(參數類型 參數變量名)(有參有返回值)
                   int(^block3)(int a) =^int(int a){return ;};
                   4.block定義三:沒有返回值,沒有參數,能夠省略(無參無返回值)
                   void(^block4)() = ^{};
             10.2block開發使用場景(block要調用了纔會使用裏面的內容)
                   1.在同一文件中使用:用strong聲明一個屬性無參的block,在經過這屬性在不一樣的方法調用
                   2.在不一樣文件中使用:在模型聲明block,到UITableViewDelegate中選中調用,具體問題具體分析
                   3傳值:.聲明一個帶參數的block屬性2.在須要傳參數控制器中定義block,並在屬性中傳遞參數3.在傳值控制器中調用block
            *10.3block內存管理(面試題:block是OC對象嗎,去官方文檔中查找:working with blocks,上面寫了Blocks are Object-C objects)
                   1.內存5個區:堆,棧,方法區,常量區,全局區.
                   2.如何區別ARC,MRC:ARC在dealloc不能夠調用[super dealloc],看是否能調用release
                   3.MRC中特色:手動內存管理,須要本身釋放內存,開發習慣:訪問屬性或者設置屬性,必須用點語法,不要使用下劃線
                   4.MRC沒有strong和weak屬性, 有assign(至關與weak),retain(至關與strong),copy  
                   5.MRC如何管理block:block放在外部局部變量時或者被static修飾時,放在棧中,其餘時候方在全局區(ARC:block放在外部局部變量時,放在堆中)
                   6.MRC注意點:不能使用retain聲明block,他放在棧中,只能用copy放在堆中
                   7.ARC如何管理block:外部局部變量,放在堆中:
                   8.ARC注意點:使用strong聲明block,不能使用weak:若是沒有強指針,就會銷燬
             *10.4block循環引用(block對外部強指針強引用,不會對弱指針強引用)
                  1.原理:modVc會強指針指向modal對象(每個對象都有一個block),modal對象的block會指向block這個對象,block對象中的block當使用self,又會指回modal對象中的block
                  2.解決方案:使用__weak type(self) weakSelf = self;,當吧強指針換成弱指針時,調用self時會把block對象的指向modal的block的block換成弱指針,當銷燬一個時,其餘就會所有銷燬了.
                  3.注意點:還有一種比較難的,當使用延遲操做或異步任務,就須要搞個strongSelf代替self,再在外部搞個弱指針使他們不會被銷燬又不會循環引用.

面試

相關文章
相關標籤/搜索