ios开发
知更鸟Coollee
笨鸟先飞,会第一个看到初生的太阳。。。
公众号:iOS进化论,欢迎关注!
展开
-
使用NSProxy和NSObject设计代理类的差异
经常发现在一些需要使用消息转发而创建代理类时, 不同的程序员都有着不同的使用方法, 有些采用继承于NSObject, 而有一些采用继承自NSProxy. 二者都是Foundation框架中的基类 , 并且都遵守了这个协议, 从命名和文档中看NSProxy天生就是用来干这个事情的. 但即便如此, 它们却都定义了相同的消息转发的接口, 那我们在使用二者来完成这个工作时有什么差异呢.先贴一下通过二者来创建代理类的最基本实现代码.继承自NSProxy@interface THProxyA : NSProxy转载 2020-07-26 11:17:08 · 651 阅读 · 0 评论 -
Xcode编译报 library not found for -lstdc++ 问题
背景:最近在编译某第三方提供的SDK的时候,发现编译过不了,报错信息如下:提示library not found for -lstdc++,开始以为没有导入对应的库,可是添加的时候,根本搜不到这个library,一番度娘谷哥,发现libstdc++已经在xcode10被移除掉了,这怎么办,项目要编译,xcode也是11版本,难道没救了吗?功夫不负有心人,最终在这里,找到了解决办法,简单来说就是,虽然xcode移除了这个库,但是我们还可以再手动添加回来,当然除了自己找对应的库文件添加之外,作者把对应的库原创 2020-07-23 10:29:53 · 974 阅读 · 0 评论 -
Flutter如何设置文字大小不随系统设置而改变?
我们知道,在原生iOS开发中,一旦文字设置了font之后,是不会随着系统设置中的字体大小的改变而发生改变的。可是,在flutter开发中,我们使用的Text widget却会随着改变,这就会导致布局错乱,使得整个页面异常难看。首先,如果是针对单独的Text widget,系统提供了textScaleFactor属性,用于设置文字的缩放倍率Text( '(model.reason)', textScaleFactor: 1.0, maxLines: 1, overflow: Tex原创 2020-05-18 19:05:19 · 6133 阅读 · 2 评论 -
iOS解除Block循环引用,你只知道__weak就out啦
在iOS的开发中,block是比较频繁的一个使用的功能。可是我们都知道,block如果使用不当,很容易引起循环引用,造成内存泄漏。今天为大家介绍几种解除block循环引用的方式,愉快的用起来吧!Answer 1 :最常规的方式 – weak & strong dance!我相信作为一个有一定开发经验的人都知道,想要防止循环引用,最关键的就是要打破引用链,即让两个相互强引用的对象,让其中...原创 2020-04-06 23:52:08 · 1500 阅读 · 0 评论 -
tableview图片延迟加载的骚操作~
现在有这样一个场景,有一个tableview,每个cell上都有imageView,imageView要加载图片,用户在滑动列表的时候,如果随滑随加载图片的话,列表会非常卡顿,验证影响用户体验。这个时候应该怎么优化呢?方法一:利用UIScrollView的代理方法。在tableView滑动的过程中不加载图片,等停止滑动时再加载当前可见cell上的图片。这种方法是比较容易想到的优化方式,但是实现...原创 2018-02-11 17:10:37 · 1431 阅读 · 0 评论 -
ios-阿里P6面试题(转)
http://www.cocoachina.com/ios/20171129/21362.html 确实不愧是阿里的面试题,很多题看着很基础,有很多可以答的,但是真的要说的很全面,很准确还是有很高的难度。更多的偏向于原理和底层,尽管我们不一定能去阿里面试,但是作为技术人员,要时刻保持学习的心态才能成长,共勉!转载 2017-12-01 11:50:29 · 3024 阅读 · 0 评论 -
iOS应用状态保存和恢复
应用场景: 当程序进入后台时候,把用户当前查看的页面层级保存起来,如果应用停止运行,那么用户在下次打开应用的时候,可以按照之前保存的状态恢复现场,让用户看起来仿佛从来没有关闭过一样。 实现步骤: 1.首先在AppDelegate中实现如下方法: - (BOOL)application:(UIApplication )application shouldRestoreApplicationSt原创 2017-08-31 17:34:44 · 1603 阅读 · 0 评论 -
iOS Charts 混合柱状图开发
近期公司的产品有新的需求,大概效果就如下所示: 我们使用的是ios-charts这个第三方,但是在网上找了一大堆也没有发现这种效果的柱状图,没办法只能自己操刀来实现了。实现过程中借鉴了安卓中的MPCharts类似效果的实现方法,话不多说,直接上代码,代码中注释已经比较清晰了,有不懂得欢迎咨询。 我是写了一个这种效果实现的工具类,在.h文件中申明方法:/** 两根柱子以及折线的混合显示 @par原创 2017-04-05 13:38:27 · 7818 阅读 · 1 评论 -
ios中修改状态栏颜色的方法
工作中会经常遇到需要修改状态栏显示的颜色,实践发现,修改其实很简单,只需要在项目的infoPlist文件中添加一项:View controller-based status bar appearance,添加后,它的默认值就是NO,表示由系统管理状态栏,此时在AppDelegate中添加如下代码:[UIApplicationsharedApplication].statusBarStyle =UIS原创 2017-08-01 21:55:33 · 2154 阅读 · 0 评论 -
ios中修改状态栏颜色的方法
工作中会经常遇到需要修改状态栏显示的颜色,实践发现,修改其实很简单,只需要在项目的infoPlist文件中添加一项:View controller-based status bar appearance,添加后,它的默认值就是NO,表示由系统管理状态栏,此时在AppDelegate中添加如下代码:[UIApplicationsharedApplication].statusBarSty原创 2016-06-30 17:37:22 · 12462 阅读 · 0 评论 -
iOS截屏分享功能实现
产品经理今天提出一个新的需求,需要实现类似于每日优鲜、淘宝等客户端的截屏分享的功能,即home+power截屏后弹出分享页面,同时将截取到的图片放在当前页面中展示,如下效果: 之前没有做过这样的需求,但是实现过截屏相关的功能,故初步考虑获取系统截屏事件,然后在该事件中利用程序截屏并按一定比例显示在屏幕上,最后在该事件中调用友盟分享的方式实现了。 首先第一步是考虑如何获取系统截屏的事件,查找之原创 2017-05-02 19:28:59 · 11923 阅读 · 0 评论 -
解决Line XX:StartTag:invalid element Name问题
多人开发修改同一个文件,提交git后再拉取容易产生问题,今天就遇到了一个问题:合并完代码后,运行就会直接报Line 19:StartTag:invalid element Name这个错误。研究一下发现是我和同事同时修改了同一个xib文件,出现以上问题,解决办法如下: 鼠标右键点击报错的xib文件–》选择open As–》选择source Code–》在打开的源码中删除合并冲突的东西,然后点击运行原创 2017-07-12 15:12:21 · 5300 阅读 · 0 评论 -
iOS App 签名的原理(转)
iOS 签名机制挺复杂,各种证书,Provisioning Profile,entitlements,CertificateSigningRequest,p12,AppID,概念一堆,也很容易出错,本文尝试从原理出发,一步步推出为什么会有这么多概念,希望能有助于理解 iOS App 签名的原理和流程。目的 先来看看苹果的签名机制是为了做什么。在 iOS 出来之前,在主流操作系统(Mac/Wi转载 2018-02-07 14:53:23 · 1219 阅读 · 0 评论 -
cell高度自适应实现的最简单方式
曾经为了实现cell的高度自适应,不知道吃了多少苦。那个时候,是在我的数据模型model中添加一个height属性,实现它的get方法,在get方法中计算需要多行显示文字的高度,然后再加上其他乱七八糟的高度并返回,然后在tableview的 - (CGFloat)tableView:(UITableView )tableView heightForRowAtIndexPath:(NSIndexP原创 2017-01-05 16:10:37 · 12253 阅读 · 0 评论 -
ios 为APP设置App Store中的兼容性问题
最近发现,我们的APP发布到App Store后我发现在兼容性上为: 需要ios8或更高版本。与iPhone、ipad、iPod touch兼容 我擦嘞,这不对呀,我们开发的APP只是针对iPhone的呀,这和ipad、iPod touch兼容并没有啊,App Store上显示成这样,肯定会误导用户啊,怎么破?然后就是一堆百度,可能是我百度的姿势不对,始终没有找到改变这种兼容性的方原创 2017-04-13 19:48:00 · 11779 阅读 · 0 评论 -
iOS强迫症的福音--优雅的删除项目中无用的图片资源
随着产品的更迭,工程中的图片资源也在不断的更新换代。那么你是不是曾今为项目中的无用图片过多而脑阔疼?为一个个查找,删除这些图片而奔溃?你是不是有仰天长啸:神啊,告诉我如何优(yi)雅(jian)的删除项目中无用的资源吧?现在就让我来告诉你–FengNiao–一个删除Xcode工程中无用图片资源的神器!啥是fengniaoFengNiao一个命令行工具,由iOS界的大神onevcat喵神使用...原创 2019-08-16 11:57:06 · 1715 阅读 · 0 评论 -
Lottie动画使用及原理分析
目录结构:1.Lottie是什么?2.为什么使用Lottie?3.Lottie适用于哪些场景?4.Lottie的使用和原理1.Lottie是什么?Lottie是Airbnb开源的一个动画渲染库,支持多平台,包括iOS、Android、React Native以及Flutter(https://github.com/airbnb/lottie-ios)。除了官方支持的平台,更...原创 2019-06-05 10:36:48 · 7688 阅读 · 0 评论 -
iOS开发之为线程加把锁
在iOS开发中,不可避免的需要使用到多线程。但是使用多线程的过程中,如果使用不当,就会造成数据混乱,那要怎么保证多线程使用中不会因为访问同一个内存空间而造成数据混乱呢?这个时候锁(LOCK)就该闪亮登场了。本文会从以下几个方面介绍锁,希望对大家有帮助:1)锁是什么以及为什么需要?2)iOS中都有哪些锁?3)锁的使用?- 锁是什么以及为什么需要?锁是一种保证多线程并发执行安全的方式,避免...原创 2019-01-09 16:20:22 · 2031 阅读 · 0 评论 -
iOS底层原理探究之----KVC
不管是平常开发还是找工作面试中,KVC、KVO的原理都是面试官比较喜欢问的问题。最近抽时间研究了一下KVC和KVO的实现原理,本想着一篇文章就可以说完,等研究完才发现不看不知道,一看吓一跳。KVC和KVO都有很多内容可以研究,故分为两篇分享,第一篇分享KVC的底层原理。本次分享准备从这几个方面...原创 2019-01-14 18:18:57 · 621 阅读 · 0 评论 -
iOS创建一个底部sheet(类似iPhone地图)
(本文是自己的翻译,感兴趣的可以查看原文,原文链接:https://skagedal.github.io/2018/08/03/bottom-sheet.html)BottomDrawer或者叫BottomSheet作为一种用户交互模式已经在iOS使用的越来越频繁,经常出现在苹果自己的APP中,比如Apple Music和Maps。但是尽管如此,却一直没有一个标准组件可以让开发者直接使用。在这...翻译 2018-08-21 15:54:30 · 2905 阅读 · 0 评论 -
iOS UITextView问题一网打尽(占位文字、汉字输入字数计算、自动高度改变)
在iOS开发中,UITextView是一个使用还算比较多的控件。但是用过的人都知道,UITextView有很多存在的问题,今天就来一一说它一说。一、设置textView的placeHolder首先需要解决的就是占位文字placeHolder的问题,与UITextField相比,UITextView并没有相应的placeholder属性设置占位文字,但是可以通过category的方式给t...原创 2018-08-13 20:46:58 · 1773 阅读 · 0 评论 -
iOS UITextView设置初始输入位置
有时候我们希望textView不从最开始的位置输入,这时就需要对textView进行设置,那应该设置哪个属性呢? 实测:设置textView的textContainerInset可以实现改变输入位置的需求。它设置的是输入文字相对textView本身的距离。 textView.textContainerInset = UIEdgeInsetsMake(7, 16, 0, 16); 另:也尝试设...原创 2018-06-08 17:18:20 · 4748 阅读 · 0 评论 -
最简单方式解出线上app中Assets.car的图片资源
有时候我们会有这种需求:下载的别人开发的App,想提取到里面包含的所有图片文件,但是下载的包里面我们直接能看到的图片却是很有限的。而这里面还有一个比较大的文件那就是Assets.car,那么它是什么呢?实际上这就是我们平常开发中放在Assets.xcassets中的图片资源。这里要讲的就是如何用最简单的方式取出Assets.car中的图片文件。首先到github下载cartool(没错,这就是...原创 2018-03-05 16:06:09 · 12434 阅读 · 1 评论 -
不仅仅是截图--截取整个scrollView的内容
以下的方法,非常简单的实现截取整个scrollView控件及其子控件的内容,比如tableView等,并生成一张图片。不仅仅是我们可以看到的一屏大小的内容。- (UIImage *)screenShotImageOfScrollView:(UIScrollView *)scrollView{ UIImage* image = nil; //获取图片 UIGraphicsBeginIm原创 2017-07-10 16:24:18 · 2680 阅读 · 0 评论 -
iOS使用webSocket的简单实现
最近做K线图相关的东西,需要和服务器进行长连接实时获取数据,因为后台使用webSocket实现的,经过一番波折最终找到了facebook开源的 SocketRocket 框架,他是用oc封装的websocket实现,这篇是在网上找到的使用SocketRocket的例子,感觉写的不错,但是看完也就是个入门,如果要实现自己的长连接,肯定还是需要一番折腾的。 原文链接:http://www.cocoac转载 2017-06-06 19:41:43 · 11555 阅读 · 1 评论 -
Xcode 7.3 自定义类无法自动联想的解决办法
转载自:http://www.jianshu.com/p/69752106ee07点击顶部工程名 --> 左侧Target --> BuildSettings --> Apple LLVM 7.1 -Language-Objective C 下面的 Weak References in Manual Retain Release 设置为YES. 然后common+B编译运行一下就可以了转载 2016-08-15 18:57:38 · 356 阅读 · 0 评论 -
Duplicate Symbol链接错的原因总结和解决方法
Duplicate Symbol链接错的原因总结和解决方法 duplicate symbol(符号复制,即有相同的文件名)是一种常见的链接错误,不像编译错误那样可以直接定位到问题的所在。但是经过一段时间的总结,发现这种错误总是有一些规律可以找的。例如,我们有如下的最简单的两个类代码:// ClassA.h#import @interfa转载 2016-07-05 14:48:47 · 15579 阅读 · 0 评论 -
iOS滑动返回的最简单实现
大家都知道,ios在7.0之后navigationController开始支持右滑返回,不过这个区域只是在屏幕的最左边。创建新的应用程序,默认都是支持滑动返回的。但是如果我们自己自定义navigationBar上的返回按钮的话,系统自带的返回就失灵了。不知道是我太笨还是大家觉得太简单,总之我在网上找了很久都没有找到简单实现手势滑动返回的解决方法,so,没有办法,只能自己研究了。不过幸运的是,有点成原创 2016-07-04 20:21:18 · 839 阅读 · 0 评论 -
ios获取当前视图所在的viewController
有的时候,我们需要在某个view中获取到这个view所在的控制器,以便进行controller相关的操作,比如push到一个新的控制器,下面就介绍一下如何获取。我们可以为UIView写一个分类,如下:.h文件中: #import @interface UIView (KFGetController)//获取当前view所在的控制器- (UIVie原创 2016-07-01 11:31:49 · 6152 阅读 · 0 评论 -
解决UINavigationController在push到新控制器时“卡顿”问题
今天在开发中发现从A控制器push到B控制器的时候,会有视觉上的卡顿现象,也不知为何,最后在网上找到了解决方法。原来,在ios7之后,UIViewController的view的背景颜色默认为透明色(即clearColor),所谓"卡顿"其实就是由于透明色重叠后,造成视觉上的错觉,所以这并不是真正的"卡顿",但是很是影响用户体验,解决的办法其实也很简单,只需要设置B控制器view的backgr原创 2016-06-30 16:15:37 · 1082 阅读 · 0 评论 -
UISearchBar自定义右侧取消按钮
前些天工作需要做一个搜索框,需要自定义右侧的取消按钮的颜色和文字,于是上网搜了一些资料,发现都出自一个模板,有一点偏差,所以在这里更正一下,让同学们少走一点弯路。首先初始化一个UISearchBar - (void)initSearchBar{ _searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(20,转载 2016-06-30 13:51:04 · 837 阅读 · 0 评论 -
ios开发中的常见问题和解决以及总结
1.如何从自己的app跳到系统设置界面?需要在需要跳转的地方调用下面的方法,以openURL的方式//蓝牙设置界面 NSURL *url = [NSURL URLWithString:@"prefs:root=Bluetooth"]; if ([[UIApplication sharedApplication] canOpenURL:url]) {原创 2016-05-31 13:36:17 · 2282 阅读 · 0 评论 -
iOS中正则表达式的使用
一、什么是正则表达式 正则表达式,又称正规表示法,是对字符串操作的一种逻辑公式。正则表达式可以检测给定的字符串是否符合我们定义的逻辑,也可以从字符串中获取我们想要的特定部分。它可以迅速地用极简单的方式达到字符串的复杂控制。二、正则表达式的语法 看一个过滤纯数字的例子- (BOOL)validateNumber:(NSString *) textStrin转载 2016-03-21 18:13:09 · 489 阅读 · 0 评论 -
iOS 音乐类App必备功能:后台播放、锁屏封面、远程播放控制
转载自http://blog.csdn.net/u012716788/article/details/46583561 感觉对于做音乐类的APP非常有用,自己收藏,以备不时之需前言在默认环境下App被切换到后台时,音乐的就停止播放了,但音乐类App的一般都会需要在后台继续播放,这样用户就可以一边听音乐,一边操作其他的App。对于这种情况我们可以对App做一些简单的配置转载 2016-03-08 15:51:17 · 4942 阅读 · 0 评论 -
iOS使用UISearchBar的右边cancelButton的问题
苹果自带的UISearchBar还是蛮好用的,但是在使用过程中也遇到一些坑,比如如何找到searchBar右侧的取消button,以及第一次点击的时候会执行UISearchBar的代理方法:searchBarTextDidBeginEditing 的问题。 首先如何获取cancelButton并且进行自定义呢?for (UIView *viewin [[_searchBar.原创 2016-08-24 11:23:57 · 8049 阅读 · 0 评论 -
UIWebView简单使用:加载进度条,加载PDF文件
UIWebView的使用是很常见的,现在将它的一些使用方式总结如下:1)首先是最简单的加载一个URL(网页链接): UIWebView *webView = [[UIWebViewalloc] init];webView.frame =CGRectMake(0,KNavigationHeight, KScreenWidth,KScreenHeight-原创 2016-07-01 15:52:35 · 1189 阅读 · 0 评论 -
干掉iOS中的UITbleViewCell分割线偏移的方法
系统默认的cell的分割线都是向右有一些偏移的,大多数时候我们不需要对其进行修改,但是如果产品有这种特殊需求,需要让cell的分割线不偏移,此时就需要下面这样做了。废话不多说,直接上代码:在需要实现的类中,实现如下两个方法,并且需要显式的调用viewDidLayoutSubviews这个方法,这样就可以看到分割线的偏移已经被干掉了//自己实现的方法-(void)viewDidLay原创 2016-07-05 15:06:11 · 560 阅读 · 0 评论 -
iOS获取当前设备的型号、分辨率、运营商以及地理位置
最近做一个需求:后端需要统计使用我们APP产品的用户手机的各种信息,这些信息包括:设备品牌、设备型号、设备分辨率、操作系统、运营商、APP版本号、设备ID(UUID)、地址位置。这些信息其实获取也都不是很难,简单记录一下://首先获取当前设备对象 UIDevice *device = [UIDevice currentDevice];原创 2017-03-21 18:19:27 · 5364 阅读 · 1 评论 -
使用UIBezierPath和CAShapeLayer高效为UIView添加圆角
我们在实际开发中,经常会遇到为某个view添加圆角的需求,这样出来的view的效果是比较好看的,那么平时用的最多的实现方式是什么呢?或许你也和我一样:UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 200, 40)]; btn.layer.cornerRadius = 5; btn.clipsToBou原创 2017-02-16 10:26:51 · 5373 阅读 · 0 评论 -
消除xcode8中Empty paragraph passed to '***' command的警告
今天在将swift版的Charts(一个绘制各种统计图表的第三方库)引入到自己的oc项目,编译后出现一堆的警告,如下所示: 打开查看详细发现是在这些文件中添加的注释产生的警告,这是升级xcode8之后才会出现的情况。解决办法呢,其实也很简单,就是在编译选项中添加警告屏蔽。 如下图步骤操作: 这样再次编译,就可以解决问题了。如果还不行,就请先clean一下项目(command+shift+k原创 2016-12-23 15:57:40 · 6849 阅读 · 2 评论