一道 Runtime 面试题的思考 这道面试题大部分应该都见过 https://halfrost.com/objc_runtime_isa_class/@interface Sark : NSObject@property (nonatomic, copy) NSString *name;@end@implementation Sark-(void)speak{ NSLog(@"*******my ...
Collectionview 与父视图 手势冲突 场景如下:controller的view上添加了一个手势, 在view上添加一个collectionview;这会引起手势冲突,collectionview上select方法不执行;解决方案:在父视图的手势处理方法做如下处理- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRec...
OpenGL ES 绘制三角形 这篇博客是根据我的一个工程整理而来,用于理清思路, 使用OpenGL 记性绘制的一般流程.当前的controller 是继承于GLKViewController;- (void)viewDidLoad { [super viewDidLoad]; [self setupContext]; [self setupShader];}setupContext...
OpenGLES 入门理解 先推荐几篇好的博文:https://niyaoyao.github.io/2018/05/23/learning_opengl(es)_opengl_model_pipeline_and_practices/https://blog.csdn.net/lance710825/article/details/78137950/https://learnopengl-cn.readthed...
GPUimage 滤镜视频录制 本篇是基于落影的博客进行记录,用以学习.要做的任务: 开启摄像头, 画面加了一个滤镜实时显示, 点击录制,对加了滤镜的视频进行保存,录制结束,将数据写入到相册中.整体的流程是这样.用GPUimageVideoCamer 进行图像和音频的捕获, 视频通过滤镜处理,之后有两个流向;1. 直接显示 //初始化 _videoCamer = [[GPUImageV...
Dealloc 实现 原理 当对象的引用计数Wie0时, 系统会调用对象的dealloc方法释放- (void)dealloc { _objc_rootDealloc(self);}在内部void_objc_rootDealloc(id obj){ assert(obj); obj->rootDealloc();}继续调用了rootDealloc方法显然调用顺序...
从OC到Swift的快速实践 本文是参考这篇博客, 里面的内容 ,我用playground实践了一遍,记录自己的理解和思考.一. 数据swift是数据安全类型, 不存在隐式转换.类型转换标识符:is: 一个实例是否是某一种类型as: 将实例转换成某一种类型(子类型 -> 父类型)as?: 将某个类型转成可选类型, 通过判断可选类型是否有值,来决定是否转化成功as!: 转成具体的类型,如果不...
weak与字符串 weak的特点是不会使引用对象的引用计数加一,即不持有对象,在对象为nil时,自身也会为nil.但是在字符串这里有一点区别weak修饰的属性引用了一个常规的对象,当这个对象被释放时, weak对象也会被释放.但是在字符串中似乎有些不一样://有两个属性@property (nonatomic, copy) NSString *imCopyStr;@property (nona...
GCD 实现多线程顺序执行 这个标题其实是有些不对的, 实际要实现的功能是执行完A,B,C 三个任务之后, 再执行D.第一种方式:使用dispa_group完成- (void)orderImplementGCD{ dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_group_t group = dispatch...
anchorPoint 和 position 读到一篇讲UIView frame 实现的博客, 对相关知识进行了一个总结https://mp.weixin.qq.com/s/ImYWnDeq4gG_gUkL3_ZDgwview的frame计算要牢记几点, 计算公式如下:frame.origin.x = position.x - anchorPoint.x * bounds.size.width; frame.origin.y...
ios xib 表视图的headview 自适应高度 需要完成一个需求: tableview的headView中有一个可换行的label, 需要headview写入数据时, tableview的headView的高度自适应. 不手动计算字符串的高度;1. 在headview的操作:1.1 headview的xib,所有的控件约束要保证是正确的,从上到下的约束要确保有,并且是正确的.1.2 在headview的.m文件中,要设置高度变化...
tableview复用cell的两种方式 在- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {中, 复用cell时 , 有两种方式1. 你在之前已经使用下列方法对tableview的cell进行注册过了[_tab...
使用xib 自定义cell, 自适应高度方案 在计算cell的高度这个问题上,经历三种阶段; 1. 使用纯代码创建cell, 这个需要根据model的数据, 手动计算label的size, 再根据其它控件的位置, 来计算cell的整体高度. 2. 使用xib创建cell, 然后使用了一个比较牛的第三方FDTemplateLayoutCell, 简单说一下用法: cell的约束必须在top,和bottom 与内部的控件有约束, 这样才可以...
UIGraphicsGetCurrentContext vs UIGraphicsBeginImageContext 看了Core Graphics 的一点内容, 然后在自己的代码中看到了一个不一样的函数, 有些迷惑,就搜索了相关内容, 发现Stack Overflow上一篇帖子讲的很清晰.链接;总结成一句话:UIGraphicsGetCurrentContext 在drawRect 方法中使用,获得上下文; UIGraphicsBeginImageContext在任意一个你想进行图片处理的方法中条用....
xib label约束的优先级 在平行或者垂直方向,对两个内容自适应的label进行约束,需要设置其Content Compression Resistance Priority(内容压缩阻力优先级)或者Content Hugging Priority(内容紧靠优先级) 进行正确合适的约束. 这一篇博客讲的通俗易懂, 推荐Autolayout——“Content Compression Resistance”和“Conten...
iOS 中应该避免的坑 这篇博客是作为自己开发时的一些准则,遵守这些准则,保证代码的质量. 会陆续更新……内存泄漏: 如果初始化了一个变量,结果没有使用, 那就把这行代码删除或者注释. 这种情况就是内存泄漏,积少成多,会出问题....
iOS 多target开发(快速开发一个重复的APP) 一个工程打包时,想同时发一个企业版和App Store,就会遇到一个问题. 企业版账户打包的APP 不能发布到App Store中, 所以我们需要改变bundle id. 如果直接修改bundle id, 就在每一次打包发布时,需要反复切换修改bundle id,这样很容易出岔子. 而使用多target就能容易的实现这一目标. project和target的区别:project ...
在for循环中,对可变数组进行删除操作 /** 在可变数组中进行删除删除操作,比如移除值为3的元素, 原下标为4的元素变成下标为3, 那么在下一次循环(这个循环有元素的比较)中,这个元素是不会被执行的, 因为位置变了; 所以: 1.不在for循环中进行数组删除 2.在移除元素之后,将i-1, 回到这次循环之前. 2.1: 使用i–,要保证是值比较,而不是下标比较,否则就停在这个循环了 */ - (v...
UISearchController使用中遇到的坑 这次开发需要用到搜索框, 以前大都是使用UITtexField进行自定义的,这次使用了UISearchController. 在iOS8之前,使用的的是UISearchDisplayController+SearchBar的组合, iOS8之后,原有的方式废弃, 苹果推荐使用UISearchController,其本身包括searchBar.但是使用中出现了一系列问题 UISearchC...
UIButton 图片(imageEdgeInsets)和文字(titleEdgeInsets)设置 上面的界面可以很方便的使用tableviewCell 来实现, 但是如果只是简单的两三个,使用tableview 就显得有点臃肿了;1. 你可以封装一个控件,在一个view上放置一个imageview和一个label, 加上点击事件,搞定了;2. 但是为什么不尝试另一种方法呢? 直接使用UIButton,这个控件内部有一个imageview和label,适当调整它们的位置, 我们就可以很容易实现想...