iOS
xfy6238
这个作者很懒,什么都没留下…
展开
-
一道 Runtime 面试题的思考
这道面试题大部分应该都见过 https://halfrost.com/objc_runtime_isa_class/@interface Sark : NSObject@property (nonatomic, copy) NSString *name;@end@implementation Sark-(void)speak{ NSLog(@"*******my ...原创 2020-02-03 15:56:17 · 184 阅读 · 0 评论 -
Dealloc 实现 原理
当对象的引用计数Wie0时, 系统会调用对象的dealloc方法释放- (void)dealloc { _objc_rootDealloc(self);}在内部void_objc_rootDealloc(id obj){ assert(obj); obj->rootDealloc();}继续调用了rootDealloc方法显然调用顺序...原创 2019-11-05 20:39:26 · 798 阅读 · 0 评论 -
weak与字符串
weak的特点是不会使引用对象的引用计数加一,即不持有对象,在对象为nil时,自身也会为nil.但是在字符串这里有一点区别weak修饰的属性引用了一个常规的对象,当这个对象被释放时, weak对象也会被释放.但是在字符串中似乎有些不一样://有两个属性@property (nonatomic, copy) NSString *imCopyStr;@property (nona...原创 2019-10-29 22:17:11 · 609 阅读 · 0 评论 -
UIButton 图片(imageEdgeInsets)和文字(titleEdgeInsets)设置
上面的界面可以很方便的使用tableviewCell 来实现, 但是如果只是简单的两三个,使用tableview 就显得有点臃肿了;1. 你可以封装一个控件,在一个view上放置一个imageview和一个label, 加上点击事件,搞定了;2. 但是为什么不尝试另一种方法呢? 直接使用UIButton,这个控件内部有一个imageview和label,适当调整它们的位置, 我们就可以很容易实现想...原创 2018-06-21 16:30:02 · 312 阅读 · 0 评论 -
UISearchController使用中遇到的坑
这次开发需要用到搜索框, 以前大都是使用UITtexField进行自定义的,这次使用了UISearchController. 在iOS8之前,使用的的是UISearchDisplayController+SearchBar的组合, iOS8之后,原有的方式废弃, 苹果推荐使用UISearchController,其本身包括searchBar.但是使用中出现了一系列问题 UISearchC...原创 2018-06-21 21:30:49 · 2282 阅读 · 2 评论 -
在for循环中,对可变数组进行删除操作
/** 在可变数组中进行删除删除操作,比如移除值为3的元素, 原下标为4的元素变成下标为3, 那么在下一次循环(这个循环有元素的比较)中,这个元素是不会被执行的, 因为位置变了; 所以: 1.不在for循环中进行数组删除 2.在移除元素之后,将i-1, 回到这次循环之前. 2.1: 使用i–,要保证是值比较,而不是下标比较,否则就停在这个循环了 */ - (v...原创 2018-06-22 14:31:34 · 919 阅读 · 0 评论 -
iOS 中应该避免的坑
这篇博客是作为自己开发时的一些准则,遵守这些准则,保证代码的质量. 会陆续更新……内存泄漏: 如果初始化了一个变量,结果没有使用, 那就把这行代码删除或者注释. 这种情况就是内存泄漏,积少成多,会出问题....原创 2018-07-08 18:05:33 · 165 阅读 · 0 评论 -
iOS 多target开发(快速开发一个重复的APP)
一个工程打包时,想同时发一个企业版和App Store,就会遇到一个问题. 企业版账户打包的APP 不能发布到App Store中, 所以我们需要改变bundle id. 如果直接修改bundle id, 就在每一次打包发布时,需要反复切换修改bundle id,这样很容易出岔子. 而使用多target就能容易的实现这一目标. project和target的区别:project ...原创 2018-07-02 21:27:08 · 1602 阅读 · 0 评论 -
xib label约束的优先级
在平行或者垂直方向,对两个内容自适应的label进行约束,需要设置其Content Compression Resistance Priority(内容压缩阻力优先级)或者Content Hugging Priority(内容紧靠优先级) 进行正确合适的约束. 这一篇博客讲的通俗易懂, 推荐Autolayout——“Content Compression Resistance”和“Conten...原创 2018-07-16 15:15:25 · 1642 阅读 · 0 评论 -
UIGraphicsGetCurrentContext vs UIGraphicsBeginImageContext
看了Core Graphics 的一点内容, 然后在自己的代码中看到了一个不一样的函数, 有些迷惑,就搜索了相关内容, 发现Stack Overflow上一篇帖子讲的很清晰.链接;总结成一句话:UIGraphicsGetCurrentContext 在drawRect 方法中使用,获得上下文; UIGraphicsBeginImageContext在任意一个你想进行图片处理的方法中条用....原创 2018-07-18 16:28:21 · 413 阅读 · 0 评论 -
使用xib 自定义cell, 自适应高度方案
在计算cell的高度这个问题上,经历三种阶段; 1. 使用纯代码创建cell, 这个需要根据model的数据, 手动计算label的size, 再根据其它控件的位置, 来计算cell的整体高度. 2. 使用xib创建cell, 然后使用了一个比较牛的第三方FDTemplateLayoutCell, 简单说一下用法: cell的约束必须在top,和bottom 与内部的控件有约束, 这样才可以...原创 2018-07-19 14:32:52 · 1171 阅读 · 0 评论 -
tableview复用cell的两种方式
在- (nonnull UITableViewCell *)tableView:(nonnull UITableView *)tableView cellForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {中, 复用cell时 , 有两种方式1. 你在之前已经使用下列方法对tableview的cell进行注册过了[_tab...原创 2019-05-07 16:44:25 · 343 阅读 · 0 评论 -
ios xib 表视图的headview 自适应高度
需要完成一个需求: tableview的headView中有一个可换行的label, 需要headview写入数据时, tableview的headView的高度自适应. 不手动计算字符串的高度;1. 在headview的操作:1.1 headview的xib,所有的控件约束要保证是正确的,从上到下的约束要确保有,并且是正确的.1.2 在headview的.m文件中,要设置高度变化...原创 2019-05-27 19:25:41 · 1521 阅读 · 0 评论 -
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...原创 2019-08-14 17:17:43 · 296 阅读 · 0 评论 -
GCD 实现多线程顺序执行
这个标题其实是有些不对的, 实际要实现的功能是执行完A,B,C 三个任务之后, 再执行D.第一种方式:使用dispa_group完成- (void)orderImplementGCD{ dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_group_t group = dispatch...原创 2019-08-27 17:25:54 · 516 阅读 · 0 评论 -
使用xib自定义视图的两种用法
前言: 去年开始使用xib进行界面开发,相比代码,效率更高,大大节省了时间. 但是在使用时,碰到一个问题一直很让我疑惑, 虽然我知道应该在什么时候用哪种方式, 但是内部的原因还不是很懂.我们在使用xib创建自定义视图时,有两种方式:如下图标记 1代表第一种方式,2代表第二种方式我并不知道这两种创建方式的根本区别,表面区别是创建之后里面一个有view,一个没有需要手动添加. 但是原创 2018-01-17 16:12:12 · 568 阅读 · 0 评论 -
iOS 百度翻译API 接口实现效果
昨天接到几个新任务, 第一个是要实现文字翻译功能. 从网上搜索资料发现常用的有百度翻译, 有道翻译 , 谷歌翻译.三者尽心对比: 1. 百度每月200万字符下免费 2. 有道收费,初始送100元体验金 3.谷歌翻译纯英文文档.综合考虑, 百度翻译免费,支持语言更多,决定使用百度翻译.前期准备大致相同,注册账号,申请APPID和密钥. 一个账号只能申原创 2018-01-16 22:30:12 · 3837 阅读 · 1 评论 -
xib 创建自定义view,作为tableview的headView出现的问题
问题描述: 我用xib自定义了一个视图,作为tableview的headView, 不是sectionheadView(这个也存在); 设置的时候出问题了代码如下: FindHeadView *view = [FindHeadView customInit]; view.frame = CGRectMake(0, 0, SCREEN_WIDTH, 150); head原创 2017-12-04 13:50:55 · 672 阅读 · 0 评论 -
KVO 设计模式之观察者模式
//1.KVO主要用于Model类,当Model类的一个属性发生变化的时候,会触发事件 //2.在设计模式中,有一种设计模式是观察者模式 //3.KVO是观察者模式的实现方式 //4.KVO里面涉及的几个概念 //4.1被观察者一般是我们的Model类 //4.原创 2015-11-06 10:44:18 · 552 阅读 · 0 评论 -
数据库:好用的第三方FMDB
系统的数据库使用起来并不是很方便,比较繁琐;比较优秀的,被大量使用的第三方数据库当属 FMDB; FMDB是一个封装较好的数据库管理工具 ,以下是它的详细用法:创建:1.我将数据库的创建路径写成了一个宏定义 : #define DBPATH [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDom原创 2015-11-21 19:19:42 · 566 阅读 · 0 评论 -
Core Data
CoreData 核心数据;在MVC中M是数据模型,平常我们使用的时候,都是创建一个继承于NSObject的Model,创建对应的属性;而CoreData是属于系统的一种数据管理系统数据管理一般都是增删改查,我是直接使用storyBoard创建了一个表视图控制器,创建了一个表视图,将数据展示到表视图中,下面我将自己所写的代码贴出来,代码有些乱,但是都实现了功能:#pragm原创 2015-11-03 22:14:23 · 393 阅读 · 0 评论 -
iOS开发之涂鸦板
这是一个很简单的涂鸦板,只能在这里画线条而已~首先创建一个可变数组:#import "PaintView.h"//延展 在延展中声明的属性只能属于这个类@interface PaintView ()//用于保存所有线段的数组@property(nonatomic,retain)NSMutableArray *allLines;原创 2015-11-26 15:15:28 · 733 阅读 · 0 评论 -
iOS 开发值翻牌子游戏
这是一个翻牌子的游戏~~在window上添加了一个imageView,设置了一张图片:在这张图片上调添加了足够多的button;具体如代码所示: UIImageView *imageView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:@"green.jpg"]]; imageView.frame原创 2015-11-25 21:14:58 · 731 阅读 · 0 评论 -
iOS之Button以及警告视图(简单)
//创建一个button UIButton *button1 = [UIButtonbuttonWithType:UIButtonTypeSystem]; button1.frame =CGRectMake(0,0, 60, 40); button1.center =self.window.center; [button1 set原创 2015-11-25 20:34:40 · 477 阅读 · 0 评论 -
从present的界面push到另一个界面
假设工程中有三个界面, A -> B ->C; 由A进入B时present进去的,B->C是push进去的; 第一个很好实现,第二个却会花了一些时间;在B中跳转的方法中进行如下设置: //当前的controller是present形式展现出来的,所以不在controller内,从而重新进行了设置; 但是这样做会丢失之前的nav中的viewController,原创 2017-08-10 11:13:32 · 3087 阅读 · 0 评论 -
Xib隐藏控件以及frame(位置)改变
最近在学xib, 其中一些基本的已经掌握,但还不够熟练:如scrollview的xib约束;xib创建控件需要用到约束(autolayout),autolayout进行了封装就是我们常见的masonry;当你使用纯frame进行布局的时候,是确定一个控件的x,y,width,height; 那在使用xib的时候也是如此,不论你怎么进行约束,你确定的其实还是这些值,需要让xib知道控件的位置原创 2017-08-11 11:33:30 · 4091 阅读 · 1 评论 -
iOS中集成ijkplayer视频直播框架 (error: setupDisplay not ready)
这是集成ijkplayer的一篇知识点,可以帮你快速集成,看到效果.如果想自己一步一步集成框架,可以在从网上参照其它帖子 :http://www.jianshu.com/p/1f06b27b3ac0此过程十分繁琐,需要最终得到一个框架,然后集成到工程中去;我从网上找到一个编译好的框架:链接:http://pan.baidu.com/s/1kUAYbQJ 密码:z6k9原创 2017-08-23 14:47:54 · 7158 阅读 · 0 评论 -
collectionView reloadData 之后 cell消失
最近在实现一个功能, 将网络图片等比例显示出来; 由于使用的是collectionview, 在cell中得到图片的大小,需要刷新整个视图; 图片是正常的可以等比例显示, 滑动之后,有部分cell消失不显示了; 在开始我以为是重用出错了, 在进行调试的时候,打印cell,发现hidden属性是YES; 那些消失的cell时隐藏了; 直接设置cell的hidden属性不起作用;原创 2017-09-12 13:46:52 · 2371 阅读 · 0 评论 -
iOS GCD 学习
GCD 优势: 1. 可以用在多核并行运算2. 自动利用更多的CPU内核3. 自动管理线程的生命周期任务: GCD里的操作,分为同步执行(sync)和异步执行(async), 一般使用async,开辟了一个新线程执行任务队列:存放任务的队列,一种特殊的线性表,遵从FIFO原则,分为并行队列和串行队列并行队列: Concurrent Dispatch Q原创 2017-09-14 15:05:40 · 161 阅读 · 0 评论 -
Xib 在UIImageView无法添加subViews
在xib中,如果你想在UIImageView上添加一个控件(UIButton), 你会发现在左侧的层级视图上,imageView和button是同一层级的; 这与我们想要的结果不符合.我在网上找到了这个问题,有人给出了这个解决方案:点击打开链接;大致方法如下:在xib文件中,无法添加一个子视图到UIImageView上,形成父子层级,只能形成同级视图;你可以先添加一个UIVie原创 2017-10-17 15:07:54 · 2186 阅读 · 0 评论 -
iOS UItableviewCell 自定义选中颜色及默认选中首行
需求如标题, 实现方法如下:在didSelectRow中进行如下设置:- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [tableView cellForRowAtIndexPath:原创 2017-11-03 14:37:30 · 6750 阅读 · 0 评论 -
iOS 更改tabbar字体颜色 自定义controller返回按钮
改变系统的tabbar字体颜色://设置你想要显示的颜色 NSDictionary *dictHome = [NSDictionary dictionaryWithObject:MAIN_TABBAR_COLOR forKey:NSForegroundColorAttributeName]; [navCtr.tabBarItem setTitleTextAttributes:dic原创 2017-11-21 14:13:05 · 366 阅读 · 0 评论 -
本地通知 UILocalNotification
本地通知:创建本体通知,在iOS8.0之后,使用本地通知必须注册UIUserNotificationSettings获得当前版本号,进行注册://1.创建一个本地通知 UILocalNotification *locallNot = [[UILocalNotificationalloc]init]; //2.先做一下iOS版本的判断,因为i原创 2015-11-05 12:00:58 · 463 阅读 · 0 评论