iOS
文章平均质量分 67
chernyog
它山之石 可以攻玉
展开
-
Objective-C——initialize方法调用原理分析
一、调用时机在类第一次接收到消息的时候调用二、调用顺序先调用父类的initialize方法,再调用子类的initialize方法(递归,每个类只会初始化一次)如果子类没有实现initialize方法,则会调用父类的initialize方法(消息调用机制,通过superclass指针向上查找)(所以,父类的initialize方法可能会被调用多次)如果分类实现了initialize方法,会“覆盖”类本身的initialize调用(方法合并的时候,分类的方法更靠前)三、源码窥探// obj原创 2022-02-24 14:21:17 · 1565 阅读 · 0 评论 -
NSTimer / CADisplayLink循环引用问题分析
背景:在使用定时器的时候,一不小心就会遇到循环引用问题,导致控制器不会被销毁,定时事件也不会被终止。故障代码class ViewController: UIViewController { var displayLink: CADisplayLink? // var timer: Timer? override func viewDidLoad() { super.viewDidLoad() // timer = T.原创 2021-12-23 11:03:46 · 653 阅读 · 1 评论 -
iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift
需求有A、B、C、D、E、F 六个任务,D依赖A、B的结果,E依赖B、C的结果,F依赖D、E的结果,A、B、C互不依赖,D、F之间不依赖,可以并发,整体要尽快执行完成。参考实现一、通过 OperationQueue 添加依赖关系实现/// 通过 OperationQueue 控制异步任务调度func testOperation() { // 创建异步任务 let operaA = BlockOperation { self.execTask("A") }原创 2020-06-12 18:13:50 · 396 阅读 · 0 评论 -
如何获取iPhone手机的UDID
背景:最近刚给开发者账号续费,需要重新添加UDID,于是写个简单的文档给其他业务的同事,方便他们查看设备的UDID.一、Mac电脑1. Mac自带的音乐App将手机连接到电脑,打开音乐App(或者叫iTunes App),选择左侧栏的设备,就可以查看当前手机的UDUD。2. 爱思助手 / iTools这里拿爱思助手举例:下载Mac版爱思助手软件,连接手机,也可以查看UDID。3. Xcode打开Xcode,链接手机,点击菜单栏 Window** -> Devices and .原创 2020-06-10 11:13:53 · 5149 阅读 · 0 评论 -
iOS离屏渲染
一、界面渲染RunLoop异步消息事件循环以60fps(1/60≈16.7ms)的频率刷新屏幕,view由CPU绘制,GPU渲染,最后显示在屏幕上。如果整个绘制过程在16.7ms内完成,屏幕不会卡顿,否则就会出现丢帧的问题,页面卡顿明显,影响体验。UIView的主layer的content属性指向一块缓存(backing store),调用drawRect()方法绘制,数据通过context传递写入缓存CPU 计算好显示内容提交到 GPU,GPU 渲染完成后将渲染结果放入帧缓冲区缓存写入完成后,原创 2020-06-08 10:33:30 · 444 阅读 · 0 评论 -
Cocoapods常用操作命令
查看镜像gem sources -l*** CURRENT SOURCES ***https://gems.ruby-china.com/`删除镜像gem sources --remove https://rubygems.org/添加镜像gem sources -a https://gems.ruby-china.com/初始化podspod init只安装新增的库,已安装的库不更新,但删除的库会删除pod install --verbose --no-repo-update只更原创 2020-06-01 14:28:54 · 173 阅读 · 0 评论 -
iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift
iOS异步任务调度 - OperationQueue、DispatchGroup、DispatchSemaphore、ReactiveSwift需求有A、B、C、D、E、F 六个任务,D依赖A、B的结果,E依赖B、C的结果,F依赖D、E的结果,A、B、C互不依赖,D、F之间不依赖,可以并发,整体要尽快执行完成。参考实现一、通过 OperationQueue 添加依赖关系实现/// 通过 OperationQueue 控制异步任务调度func testOperation() { //原创 2020-05-22 10:31:31 · 404 阅读 · 0 评论 -
Xcode 11.4.1 Building for iOS Simulator, but the linked library '******.a' was built for iOS.
描述:今天升级xcode(v11.3 -> v11.4.1),编译项目,报错:Building for iOS Simulator, but the linked library 'xxx.a' was built for iOS.Building for iOS, but the linked library 'xxx-iPhonesimulator.a' was built for...原创 2020-04-27 16:22:28 · 11696 阅读 · 2 评论 -
CocoaPods pod install 超时的解决办法
错误描述[!] Error installing ReactiveCocoa[!] /usr/bin/git clone https://github.com/ReactiveCocoa/ReactiveCocoa.git /var/folders/np/3ty5h5jd439ft50q9s0ygnfh0000gn/T/d20200421-5534-yfmqbf --template= --s...原创 2020-04-21 11:16:25 · 10070 阅读 · 1 评论 -
算法练习题 - 回文字符串
意图使用单链表实现判断一个字符串是否是回文字符串思路使用快、慢指针找出字符串中间那个数找出前半部分字符串遍历前半部分,和整个字符串挨个比较字符,如果都相等,则是回文字符串,反之不是开发环境swift4.2Xcode11.3示例代码Node类class Node<T>: NSObject, NSCopying { var next: Node?...原创 2020-01-09 12:24:53 · 499 阅读 · 1 评论 -
fastlane for iOS 打包探索
一、软件环境maxOS Mojave 10.14.4Xcode11.2.1swift demo projectfastlane 2.99.1ruby 2.3.7Homebrew 2.2.0gem 2.7.7二、安装 fastlane1. 安装Xcode命令行工具xcode-select --install2. 安装 fastlane使用Homebrew安装 (我使用...原创 2019-12-13 10:31:27 · 700 阅读 · 0 评论 -
LLDB-你可能遗忘的调试小技巧
现状大多数做了好几年的iOS开发者(比如本人),用的最多的调试指令,大概是po (print object)吧,如下图。对其他命令知之甚少,当然这也无伤大雅,只是效率上略低一些罢了~(lldb) po tip"hello"(lldb) po 1+12(lldb) po tip + " world!""hello world!"为了提高工作效率,我们需要了解LLDB,至少需要多...原创 2019-12-11 10:44:51 · 1082 阅读 · 1 评论 -
iOS开发之系统权限
iOS基础之系统权限背景配合监管要求,针对APP用户获取管理权限做如下整改:APP在首次启动页面对权限进行解释说明(包括解释权限的涵义以及说明使用权限的用途)个人中心-设置,增加权限设置菜单,展示涉及获取的所有权限,以及展示当前开启/关闭状态一切为了监管……软件环境Xcode11.2Swift4.2iOS13.2.2开门见山,上代码工具类:SystemPerm...原创 2019-11-20 15:48:15 · 1386 阅读 · 0 评论 -
iOS13简单适配
软件环境Xcode11 + iOS13问题列表Q1:present 不全屏问题描述:viewController present 的时候,默认没有全屏。UIModalPresentationStyle枚举public enum UIModalPresentationStyle : Int { case fullScreen @available(iOS 3....原创 2019-10-17 14:12:39 · 590 阅读 · 0 评论 -
Container View(sb-容器视图)
Container View(sb-容器视图)什么是容器视图?Container View defines a region within a view controller‘s view subgraph that can include a child view controller. Create an embed segue from the container view to the原创 2016-05-23 11:28:19 · 3702 阅读 · 0 评论 -
Swift-UICollectionView布局之线性布局
Swift-UICollectionView布局之线性布局应用场景轮播图(AppStore)数据展示(招商银行账单页)图片查看器实现思路线性布局,在二维平面上滚动,所以继承自流水布局(UICollectionViewFlowLayout)流水布局提供一下属性: itemSizesectionInsetscrollDirectionminimumLineSpacing每个cell原创 2016-05-20 17:11:04 · 3142 阅读 · 4 评论 -
Swift-自定义控件之IndicatorButton(带动画的按钮)
Swift-自定义控件之IndicatorButton(带动画的按钮)应用场景 登录或者注册时,点击按钮发送请求,此时禁用按钮,并且按钮上加载菊花,提示用户需要等待,请求回调之后隐藏菊花……实现思路初步尝试:动画修改按钮的title位置不是那么容易(或者说我没找到合适的方法)最终方案:在按钮上添加子控件,动画隐藏或显示子控件和title代码实现新建类// 继承自UIButtonpubl原创 2016-05-18 17:25:09 · 2137 阅读 · 0 评论 -
iOS-时间戳转时间
iOS-时间戳转时间众所周知,iOS默认生成的时间戳是10位整数,在调用接口时,如果服务器返回的是时间字符串或者是10位时间戳,转换格式挺方便的,但如果服务器返回的是13位的时间戳,那么就比较麻烦了。10位时间戳NSTimeInterval timestamp = timestampString.doubleValue;NSDate *detaildate = [NSDate dateWit原创 2016-04-22 16:44:07 · 1656 阅读 · 0 评论 -
Label设置行间距
Label设置行间距内容摘要UILabel显示多行文本UILabel设置行间距解决单行文本 & 多行文本显示的问题场景描述众所周知,UILabel显示多行的话,默认行间距为0,但实际开发中,如果显示多行文本,一般情况下会有一定的行间距。如果想动态调整行间距,则需要赋值富文本属性(而不是文本属性)问题分析Label显示多行文本label默认情况下,只会显示单行文本,主要是因为它的numb原创 2016-04-17 12:56:00 · 35047 阅读 · 1 评论 -
计算数字数组中元素的最值 & KVC用法延伸
计算数字数组中元素的最值 & KVC用法延伸 场景:计算一个数字数组的最大值和最小值。 原贴地址:http://stackoverflow.com/questions/15931112/finding-the-smallest-and-biggest-value-in-nsarray-of-nsnumbers方法一:排序NSArray *sorted1 = [numbers sort原创 2016-08-10 15:53:31 · 1413 阅读 · 0 评论 -
CocoaPods那些错
CocoaPods错误集锦 直奔主题,列举出平时使用CocoaPods遇到的一些问题。问题一:更新gem报错(sudo gem update --system)错误一: * 错误信息: * ERROR: While executing gem … (Errno::EPERM) Operation not permitted - /usr原创 2016-04-13 14:57:33 · 4911 阅读 · 0 评论 -
CocoaPods
2.0 cocospadCocoaPods0.介绍:帮助开发者管理iOS第三方框架的工具1.查看当前的ruby源: gem source -l// 刚开始可能是这样的*** CURRENT SOURCES ***https://rubygems.org/2.修改ruby源删除旧源: gem sources --remove https://rubygems.org/添加新源: gem原创 2015-03-16 21:53:33 · 729 阅读 · 0 评论 -
谓词(NSPredicate)
谓词(NSPredicate)1. 什么是谓词The NSPredicate class is used to define logical conditions used to constrain a search either for a fetch or for in-memory filtering.NSPredicate类是用来定义逻辑条件约束的获取或内存中的过滤搜索。2. 常用运算原创 2016-02-19 14:40:22 · 1483 阅读 · 0 评论 -
TableView,点击状态栏滚动到顶部
TableView,点击状态栏滚动到顶部背景iPhone上的应用,基本上都有个特点,只要有表格,那么用户点击状态栏,应该就会自动滚动到顶部,在下拉就可以获取最新数据了。为什么能滚动?既然能滚动,说明它是个scrollView(当然,tableView也是scrollView,废话了)什么情况下,默认就会滚动?控制器上只有一个scrollView,原因:// When the user t原创 2016-04-06 16:15:51 · 2587 阅读 · 0 评论 -
设计框架的思路
设计框架的思路需求工作中我们有时候需要自己设计一套第三方框架,那么我们应该怎么设计?会考虑哪些东西? 步骤0> 框架的名字: 最好名字中表达了框架的功能 需要准备一个主头文件,主头文件跟框架名字一致需要在主头文件中包含其他依赖的头文件其他开发者只需要包含主头文件,就可以使用这个第三方框架1> 简单易用 能够快速入手:尽快地把这个框架用起来简单的接口:类的设计、方法的设计(方法名、参数原创 2015-03-26 23:53:09 · 2410 阅读 · 0 评论 -
iOS限制文本框输入两位小数和最大值
iOS限制文本框输入两位小数和最大值实际开发中,经常会遇到这样的场景:限制某个文本框输入的最大值和小数位数,具体实现方式有很多,我这里用的是正则+代理的方式实现,思路如下:设置文本框代理// 设置输入金额的文本框代理self.txfAmount.delegate = self;定义最大值的宏,方便以后修改#define kMaxAmount 99999999实现UITextFieldDeleg原创 2016-03-22 18:48:39 · 3813 阅读 · 2 评论 -
float-保留N位小数
float-保留N位小数前言背景:在实际开发中,有时我们需要把某些浮点数(CGFloat)保留成指定小数位数的数显示在界面上(比如有的数需要保留两位小数,有的需要保留四位小数)。需求:作为接口供应方,调用者只需要告诉我们到底需要几位小数!精度取舍问题,应该在内部实现。实现方法一:使用stringWithFormat- (NSString *)formatNumber:(CGFloat)numb原创 2016-08-25 10:14:05 · 5407 阅读 · 0 评论 -
iOS屏幕截图
iOS屏幕截图直接上代码:/// 屏幕截图////// @param view 截屏的View/// @param rect 截屏的范围////// @return 截屏后的图片- (UIImage *)cropScreenInView:(UIView *)view withRect:(CGRect)rect { CGSize size = rect.size;原创 2016-08-26 09:56:42 · 642 阅读 · 0 评论 -
静态库和动态库
1、简介1、什么是库? 库是程序代码的集合,是共享程序代码的一种方式2、库的分类 开源库 公开源代码,能够看到具体的实现比如 SBWebImage、AFNetworking、CYStatusBarHUD等等闭源库 不公开源代码,是经过编译后的二进制文件(一般是.a文件),看不到具体的实现主要分为:静态库、动态库2、静态库和动态库静态库的存在形式.a.framework(被苹果原创 2015-03-16 19:32:02 · 695 阅读 · 0 评论 -
iOS打包framework静态库
iOS打包framework静态库环境环境Mac: 10.12.6Xcode: 9.11. 创建项目1.1 新建工程1.2 添加文件 * 把写好的代码文件拖入到项目里 * 主头文件中导入需要暴露的头文件1.3 设置Headers Targets -> 项目名字 -> Build Phases -> Headers * 添加需要的原创 2018-01-19 15:15:27 · 696 阅读 · 0 评论 -
iPhoneX 适配笔记
iPhone X 的到来,惊艳的是果粉,苦逼的是程序猿。今天升级到Xcode9.0,运行项目,所谓的全屏 iPhone X,but 页面好像也没有全屏,于是根据之前的适配经验,总算初步解决了这个问题,记录如下,以备后需。App 页面适配适配前 问题:App 未全屏显示解决办法LaunchImage 中添加一个和 iPhone X 相关的启动图片 * 图原创 2017-09-15 09:25:06 · 46553 阅读 · 14 评论 -
ipa包重新签名
ipa包重新签名软件环境Mac: v10.12.6 (16G29)ruby: v2.3.4rvm: v1.29.3sigh: v2.71.1Xcode: v9.2应用场景主要解决因重复打包导致测试同学回归测试的包和上传App Store的包不一致的问题。App开发测试流程 分析:一般情况下,流程如下:开发同学完成开发后,打包给测试同学测试测原创 2018-01-03 12:03:56 · 4440 阅读 · 2 评论 -
iOS 自动打包探索
# iOS 自动打包探索方式一: 使用xcodebuild命令步骤0. 准备工作:基础参数# 项目名称,打包后生成 .ipa 文件的名称projectName="JimuDudu"# 项目目录(一般情况下,shell 脚本就在项目路径下)workspacePath="/Users/apple/Documents/Projects/dudu/jimu-dudu原创 2018-01-11 14:38:50 · 574 阅读 · 0 评论 -
发布自己的项目到Cocoapods开源库
动机为什么要把代码发布到Cocoapods?对于部分非ARC项目,省去了大量的 -fno-objc-arc 标记规范更新代码版本 团队开发,指定三方库的版本,就会避免因不同时间去下载文件而可能会导致文件不一致的情况如若有新版本,只需一行命令就知晓(pod update)Cocoapods 使用简单 首先进入项目目录,pod init新建并编辑 Podfile下载安装, pod ins原创 2017-09-09 12:14:04 · 554 阅读 · 0 评论 -
ScrollView自动布局的实现方式
背景开发中,可能会有一些页面显示的元素很多,可能会超出一个屏幕,但也不适合用 TableView 或者 CollectionView,此时我们一般会用 ScrollView,那么就会出现自动布局的问题。实现方式纯代码特点编码繁琐:需要手写控件安全:只要正确地设置约束或者 frame、contentSize,一般不会出现滚动问题示例lazy var scrollView: UIScrollVie原创 2017-09-14 09:36:38 · 2458 阅读 · 0 评论 -
Swift 比较运算符
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2017-08-24 11:12:48 · 975 阅读 · 0 评论 -
iOS - 自定义 UITabBar
iOS - 自定义 UITabBar动机 关于自定义 TabBar,早就有过很多讨论,开源网站上也有很多造好的轮子,多半是纯代码实现有个性的 TabBar,当然我们可以很方便的使用它。周末闲着没事干,自己也写了一下,模仿今日头条的 TabBar 效果,实现方式是Storyboard + 代码。效果图实现步骤在 Storyborad 上搭建项目基础结构在界面上设置每个 TabBarItem 的相原创 2017-08-28 09:34:12 · 610 阅读 · 2 评论 -
LinkTextView-可点击的文本
LinkTextView背景 在开发中,有时需要展示一句带有某些可接受用户响应的关键词的文案,比如在页面上显示某某协议之类的。如果一行能完全显示(各种设备上),那么就可以在界面上写死布局;如果不能显示,则就需要使用UITextView控件了。效果图 图中,《XXXX规则》是可点击的,并且可以完美的适配各个设备。废话少说,直接上代码 ↓核心代码override func viewDidLo原创 2017-04-10 16:41:09 · 915 阅读 · 0 评论 -
TextField禁用粘贴、选择和全选功能
众所周知,TextField默认情况下,双击会出现“Paste”等提示复制粘贴的快捷菜单,方便用户快速编辑文本,但很多情况下,我们并不希望用户能够粘贴文本【虽然这样不友好,但万一产品经理要这么实现呢?】,那么我们可以这样做:方法自定义TextField重写canPerformAction方法class CustomTextField: UITextField { /// 是否只是用于显原创 2016-11-16 17:32:17 · 5559 阅读 · 0 评论 -
UINavigationController返回手势失效问题
UINavigationController返回手势失效问题问题描述从iOS7开始,系统为UINavigationController提供了一个interactivePopGestureRecognizer用于右滑返回(pop),但是,如果自定了返回按钮或者隐藏了navigationBar,该手势就失效了。原因自定义返回按钮或者隐藏navigationBar时,interactivePopGe原创 2016-02-24 13:49:03 · 1614 阅读 · 0 评论