码迷,mamicode.com
首页 > 其他好文 > 详细

流水布局与block深入研究

时间:2016-01-17 06:28:00      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:

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,再在外部搞个弱指针使他们不会被销毁又不会循环引用.

流水布局与block深入研究

标签:

原文地址:http://www.cnblogs.com/xieyunqq/p/5136721.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!