- 博客(69)
- 收藏
- 关注
原创 mac配置环境变量
通常我们在安装某个命令行工具时,需要手动配置系统环境变量,配置方法如下:1.编辑环境变量配置vim ~/.bash_profile 2.保存环境变量配置source ~/.bash_profile
2021-05-18 11:11:06
290
原创 iOS中如何hook代理方法
在iOS中要hook某个类的实例方法是比较简单的,直接交换它的IMP指针即可达到目的,例如:+ (void)load { static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ SEL originalSelector = @selector(viewWillAppear:); SEL swizzledSelector = @selector(hook_viewWillAppe
2021-04-20 15:45:13
1945
原创 Block捕获变量的典型案例
static NSInteger num3 = 300;NSInteger num4 = 3000;- (void)blockTest{ NSInteger num = 3; static NSInteger num2 = 30; __block NSInteger num5 = 30000; NSMutableArray * arr = [NSMutableArray arrayWithObjects:@"1",@"2", nil]; void(^block.
2021-04-10 22:21:16
200
原创 0-1背包和完全背包问题
一、0-1背包有一个容量为 N 的背包,要用这个背包装下物品的价值最大,这些物品有两个属性:体积 w 和价值 v。定义一个二维数组 dp 存储最大价值,其中 dp[i][j] 表示前 i 件物品体积不超过 j 的情况下能达到的最大价值,每件物品只能被添加一次。设第 i 件物品体积为 w,价值为 v,根据第 i 件物品是否添加到背包中,可以分两种情况讨论:第 i 件物品没添加到背包,总体积不超过 j 的前 i 件物品的最大价值就是总体积不超过 j 的前 i-1 件物品的最大价值,dp[i][j]
2021-03-03 13:15:46
318
原创 大数加减乘除算法(java版)
加法import java.lang.StringBuilder;class Solution { public String addStrings(String num1, String num2) { int carry = 0; StringBuilder str = new StringBuilder(""); int i = num1.length() - 1, j = num2.length() - 1; while
2021-02-21 22:54:59
337
1
原创 对于GCD中队列与线程的理解
队列(Dispatch Queue):指执行任务的等待队列,即用来存放任务的队列。队列是一种特殊的线性表,采用 FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。队列的结构可参考下图任务:一段代码,本质上就是一系列指令在 GCD 中有两种队列:『串行队列』和『并发队列』。两者都符合 FIFO(先进先出)的原则。两者的主要区别是:执行顺序不同,以及开启线程数不同。串行队列(Serial Dispa...
2021-02-07 10:54:32
495
原创 iOS如何判断相册中的照片为同一张
1、Hash法extension UIImage { var MD5: String { guard let imageData = self.jpegData(compressionQuality: 1) else { return "" } let input = NSData(data: imageData) let digestLen = Int(CC_MD5_DIGEST_LENGTH) let result = Uns
2021-02-01 09:52:29
1080
原创 java中char与int类型数字的相互转换
1、char类型转int类型数字// '1' -> 1char c = '1';int num = c - '0'; //c和'0'均会由ascii码转化为整型进行计算:49 - 482、int类型数字转char类型// 1 -> '1'int num = 1;char c = (char)(num + '0'); //'0'会转换为ascii码与整型num进行计算:48 + 1...
2020-12-09 11:42:17
8675
原创 Alamofire提交json数组格式的参数
使用Alamofire发送请求时,官方api中Parameters的格式必须为[String: Any],如果想要直接提交json数组格式,应该如何提交呢?/// A dictionary of parameters to apply to a `URLRequest`.public typealias Parameters = [String: Any]open func request(_ convertible: URLConvertible, met
2020-12-02 09:59:28
2482
1
原创 No “iOS Distribution“ signing certificate matching team ID “xxx“ with a private key was found
解决方法: 删除别人的打包证书创建自己的打包证书,这时自己的证书就是可用的了,可以进行打包了; 找到可用打包证书的人,从他的电脑上导出一个这p12文件给你,你用他的证书来进行打包; 以上两种方案肯定能解决这个问题,如果不能解决请重新打开Xcode。 ...
2020-11-14 12:13:01
6993
2
原创 nginx静态资源跨域配置
#访问路径拼接img访问本地绝对路径下的某图片 location /img/ { #跨域配置,如果不生效请先清除浏览器缓存数据 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Credentials' 'true'; add_header 'Access-Control-Allow-Methods' 'GET, PO...
2020-10-31 13:21:47
970
原创 Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile
选中项目PROJECT—Build Settings—Excluded Architecture,设置release模式下Any iOS SDK的值为armv7,因为iOS14 SDK不再支持armv7架构的手机,所以需要将armv7剔除。
2020-09-30 11:45:51
5926
4
原创 查看.framework以及.a的库文件支持的架构
.framework1.进入到framework目录下cd /Users/.../xxx.framework2.输入命令lipo -info xxx3.结果Architectures in the fat file: xsdkFramework are: armv7 arm64 不支持模拟器.alipo -info /Users/.../xxx.aArchitectures in the fat file: /Users/.../lib/xxx.a are: armv7 arm
2020-09-30 11:40:00
1681
原创 Xcode 12 : error: ‘xxx/xxx.h‘ file not found or No such module ‘xxx‘
最近几天为了适配iOS14,将Xcode11升级到了Xcode12,一编译果然还是熟悉的味道。
2020-09-29 10:21:42
2060
原创 iOS界面刷新机制
当在操作 UI 时,比如改变了 Frame、更新了 UIView/CALayer 的层次时,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。苹果注册了一个 Observer 监听 BeforeWaiting(即将进入休眠) 和 Exit (即将退出Loop) 事件,回调去执行一个很长的函数:_ZN2CA11Transaction17observer_c
2020-09-21 17:48:27
2617
原创 Swift属性重载
swift中有两种属性:存储属性和计算属性,它们都可以被重载,但是在重载方式上有一些不同。class Properties { //存储属性 var storedProperty: String? // 计算属性 var computedProperty: Bool { get { return true ...
2020-03-10 15:01:15
453
原创 使用UIPanGestureRecognizer手势时的注意事项
在iOS中,通常会使用pan手势来做控件拖拽的功能,但是在使用pan手势的时候,应当使用frame来进行布局而不是AutoLayout。特别是在拖拽的过程中,如果同时刷新拖拽视图内部的子控件,会导致拖拽出现问题,例如拖拽完回后自动回到初始位置。...
2019-12-06 11:15:18
583
原创 Swift自定义导航栏返回按钮图标
//写代码的时候Xcode没有提示这两个属性,但确实是可以设置的UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "navigationBar_back_btn")UINavigationBar.appearance().backIndicatorImage = UIImage(nam...
2019-12-05 16:27:23
1149
原创 pod 'filename used twice' build error
项目里一直存在一个很奇怪的问题,每次用pod导入一个新的第三方库,已经存在的第三方库就会报编译错误:'filename used twice' 以前以为是第三方库有问题,所以重新导入,问题得到了暂时的解决。但是指标不治本,每次pod新的第三方库,又会报这个错误。项目闲下来后仔细研究了下这个问题,发现是pod的project.pbxproj文件存在问题,重复引用第三方库的某些文件,所以导致...
2019-08-15 15:45:17
376
原创 iOS中UITableView的cellForRowAt以及UICollectionView的cellForItemAt方法不走的原因
在项目中偶尔会遇到UITableView和UICollectionView的DataSource方法不走的情况,一般原因有几个:1、没有设置DataSource的代理对象2、UITableView和UICollectionView的frame存在问题,比如说它们的宽或高为0的情况,这时候UITableView的cellForRowAt或者UICollectionView的cellForIt...
2019-07-11 20:46:52
2843
原创 Swift多数组组合算法
需求背景:在购物的过程中,挑选商品时,通常都要选择某个商品的规格,例如买衣服,需要从颜色、尺寸当中分别选中对应的规格才能确定买哪件衣服,这就需要用到多数组组合算法。 var combinationArray = [[String]]() override func viewDidLoad() { super.viewDidLoad() let...
2019-06-06 14:44:43
695
原创 java视频截图
这里介绍的是使用javacv来实现视频截图功能:maven导包:<dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>1.3.1</version>...
2019-05-05 16:24:54
3707
原创 UserDefaults引发的应用卡死,甚至手机卡死
项目里面有个哥们使用UserDefaults来保存草稿信息,保存的实例对象包含了大量的图片base64字符串(简直无语。。。),直接导致应用卡死,甚至手机卡死。但是,当保存的图片数量很少的时候又不会卡死,所以我猜测是保存的图片数量太多导致需要保存到UserDefaults所需要的空间太大,所以导致应用卡死。官方推荐也是UserDefaults来用于保存小型数据量的,比如说用户信息,保存大型数据还是...
2019-04-03 11:12:38
498
原创 关于iOS安装包的瘦身
一、IPA包分析1、生产ipa包的流程:1)Product->Archive2)Distribute App3)Development4)一直点next就可以生成ipa包2、打开ipa包1)用系统自带的归档工具打开,打开后显示Payload文件夹2)进入Payload文件夹,可以看见相应的应用,右键显示包内容,就可以看见安装包的各部分组成...
2019-03-13 10:57:38
215
原创 Swift版本升级的正确姿势
以swift4.0升级到4.2为例:1、确保在swift4.0情况下能够成功编译运行2、选择Edit -> Convert -> To Current Swift Syntax… 让Xcode帮我们把Swift4.0的代码转换为Swift4.2(升级Xcode后第一次编译,Xcode会自动提醒你升级swift版本,点那个也行),选择转换的时候不要选择pod的第三方框架,pod的...
2019-02-18 19:34:25
7822
原创 记录一次关于tableview的内存泄漏
最近对整个项目中的内存泄漏进行清查,发现一个及其隐蔽的内存泄漏,特此记录: override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { var categoryCell = tableView.dequeueReu...
2019-01-29 11:08:01
1168
原创 KVO remove observer引发的crash
crash日志:*** Terminating app due to uncaught exception 'NSRangeException', reason: 'Cannot remove an observer <XXXViewController 0x7ff158707f80> for the key path "xxx" from <XXXViewControll...
2019-01-11 16:22:38
7374
原创 第一次上传本地项目至GitHub
1.在github创建远程仓库2.上传本地项目在上传项目前,请确保你的电脑配置了Github SSH 公钥,这是用于连接远程仓库的。如果没有配置,请自行百度。git init //初始化本地仓库git add * //加入所有项目git status //检查状态 如果都是绿的 证明成功git commit -m "first commit"//提交到要地仓库,并写一些注...
2019-01-02 21:19:43
136
原创 安卓和iOS音频互通方案总结
项目中独立开发语音聊天功能,涉及到了语音录制和语音播放这两大块技术,由于后台更换平台的缘故导致这一功能前前后后调整了几次方案,特此记录总结:1.AMR格式一开始和安卓端约定的音频格式是amr,因为amr格式的音频文件比较小,而且音质也还不错,微信语音聊天也是采用的这种格式。安卓端那边直接是可以直接录制amr格式的音频,代码如下:mRecorder = new MediaRecorde...
2018-12-03 16:15:57
3852
原创 设置edgesForExtendedLayout属性时引发的导航栏背景颜色偏差问题
最近项目要将导航栏背景色由橙黄色换成纯白色,以为改一句代码就能解决的事:self.navigationController?.navigationBar.barTintColor = UIColor.fwNavigationBarColor谁知道设置完后,有部分控制器的导航栏背景色出现了问题,不是纯白色,而是看起来想白色和黑色的混合色,后来发现这些控制器都有一个共同点:self....
2018-10-15 09:17:38
1359
原创 addChildViewController的正确姿势
项目中经常出现一个控制器添加多个子控制器的情况,例如今日头条的标签切换视图,使用addChildViewController的正确姿势如下: 先添加第一个控制器,其余控制器暂时不用添加: //A控制器 let vcA = ViewControllerA() self.addChildViewController(...
2018-09-02 13:52:40
7791
原创 Notification多次调用而引发的内存泄漏问题
最近项目中出现了一个奇怪bug,后台反映我在1s内同时发起了100多次请求,直接把后台整奔溃了。经过代码核查发现,我是在发送一个通知后,引发的多次后台请求。但是,经过测试我只post一次通知,所以感觉很奇怪,于是乎在addObserver的地方断点,奇怪的现象出现了,明明只post一次通知,但是却接受到了多次通知,所以只能一种可能:注册通知的时候存在多次重复注册通知。为什么会出现这...
2018-08-14 22:06:31
1798
原创 切换UIWindow的rootViewController时导致的内存泄漏
一、切换rootViewController之前,present某一控制器 self.window = UIWindow.init(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)) self.window?.root...
2018-07-25 21:50:20
3862
原创 ios11自定义titleView导致crash
项目里需要将searchbar放置在navigationbar上面,于是自定义titleView,并将searchbar作为子视图添加上去,之前一直好好的,不知道为什么后来一push到包含searchbar的控制器,应用就奔溃并抛出:libc++abi.dylib: terminating with uncaught exception of type NSException ove...
2018-06-06 14:05:50
570
原创 terminating with uncaught exception of type NSException
项目中遇到一个奇葩的bug,只抛出这一句话,没有任何附加错误提示信息,而且crash堆栈没有定位到具体函数,然后上网搜索各种资料,都没有找到答案。导致此类bug的原因很多,通常是因为粗心造成的,就是写出了错误代码,但是编译器没有检测出来,这里分享一下fix此类bug的方法:首先是通过断点大致确定crash所在的函数,然后仔仔细细地去检查这个函数的每一句代码,任何一个字母都不要放过,然后你会找到答案...
2018-05-11 15:25:18
15675
原创 iOS视图加阴影应该注意的几个问题
1.加阴影导致卡顿 let footView = UIView() footView.layer.shadowRadius = 1 footView.layer.shadowOffset = CGSize(width: 1, height: 1) footView.layer.shadowOpacity = 0.8 fo...
2018-03-15 17:35:24
1921
原创 Xcode打包ipa后或者上传到iTunesConnect后出现的黑屏或者崩溃的问题
检查在Achieve的时候Scheme的运行模式,必须把运行模式设置为Release,否则会出现很奇怪的问题,例如跳转黑屏或者崩溃:Scheme -> Edit Scheme -> Build Configuration...
2018-02-26 16:55:49
830
原创 监听UITextField内容变化的两种方式
1.代理方法 /// delegate方法 /// /// - Parameters: /// - textField: 变化前的text值 /// - range: 当前光标的位置 /// - string: 输入的字符 /// - Returns: 是否改变内容 func textField(_ textField:
2017-09-28 22:43:15
4217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人