-
tabBar
UITabBarController
的 super init
里面会调 self.view
所以继承时 ,viewDidLoad
会比我们自己的 init
先调
平时写 viewDidLoad
直接搞到 init
去
-
类型
在Swift里面AnyObject?
必须是类,如果需要传入protocol
类型的参数,可以换成Any?
-
相机
AVCaptureSession
自定义相机界面
-
直播的第三方库
https://github.com/ltebean/Live
-
%.xf 显示小数点后x位
-
下面代码中为什么可以直接用self?
[UIView animateWithDuration:1 animations:^{ self.view.backgroundColor = [UIColor yellowColor]; }];
答:当 block 本身不被 self 持有,而被别的对象持有,同时不产生循环引用的时候,就不需要使用 weak self 了。最常见的代码就是 UIView 的动画代码,我们在使用 UIView 的
animateWithDuration:animations
方法 做动画的时候,并不需要使用 weak self,因为引用持有关系是:
UIView 的某个负责动画的对象持有了 block
block 持有了 self
因为 self 并不持有 block,所以就没有循环引用产生,因为就不需要使用 weak self 了。
[UIView animateWithDuration:0.2 animations:^{
self.alpha = 1;
}];
当动画结束时,UIView 会结束持有这个 block,如果没有别的对象持有 block 的话,block 对象就会释放掉,从而 block 会释放掉对于 self 的持有。整个内存引用关系被解除。
-
当一个View的bounds原点不为0的时候会出现什么情况?
- 它可以修改自己坐标系的原点位置,影响“子view”的显示位置。
- bounds,它可以通过改变宽高,改变自身的frame,进而影响到再父视图的显示位置和大小。
详细解释
-
什么时候用NS_OPTIONS,NS_ENUM?
NS_ENUM定义通用枚举,NS_OPTIONS定义位移枚举
位移枚举即是在你需要的地方可以同时存在多个枚举值如这样:
UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] init];
swipeGR.direction = UISwipeGestureRecognizerDirectionDown | UISwipeGestureRecognizerDirectionLeft | UISwipeGestureRecognizerDirectionRight;
//这里几个枚举项同时存在表示它的方向同时包含1.向下2.向左3.向右
而NS_ENUM定义的枚举不能几个枚举项同时存在,只能选择其中一项,像这样:
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.baseWritingDirection = NSWritingDirectionNatural;
-
渐进式图片加载
当图片从网络中获取的时候,可能由于过大,数据缓慢,这时候就需要渐进式加载图片来显示。主要通过CFData对象来实现:
创建一个CFData去添加image data.
创建一个渐进式图片资源,通过 CGImageSourceCreateIncremental
获取图片数据到CFData中
调用CGImageSourceUpdateData函数,传递CFData和一个bool值,去描述这个数据是否包含全部图片数据或者只是部分数据。无论什么情况,这个data包含已经积累的全部图片文件。
如果已经有足够的图片数据,可以通过函数绘制CGImageSourceCreateImageAtIndex部分图片,然后记得要Release掉它。
检查是否已经有全部的图片数据通过使用CGImageSourceGetStatusAtIndex函数。如果图片是完整的,函数返回值为kCGImageStatusComplete。否则继续3,4步骤,直到获得全部数据。
Release掉渐进式增长的image source。
-
__weak 和 __block 区别
__weak
本身是可以避免循环引用的问题的,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个__strong
的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题。
__block
本身无法避免循环引用的问题,但是我们可以通过在 block 内部手动把 blockObj 赋值为 nil 的方式来避免循环引用的问题。另外一点就是__block
修饰的变量在 block 内外都是唯一的,要注意这个特性可能带来的隐患。
详细解释
-
swift工程编译越来越慢
-
OC禅道
https://www.gitbook.com/book/yourtion/objc-zen-book-cn
优化UITableViewCell高度计算的那些事
-
BASE64 详解
-
解决double精度缺失的问题
https://juejin.im/post/5949edd68d6d8109de26c6bb?utm_source=gold_browser_extension