mac配置环境变量 通常我们在安装某个命令行工具时,需要手动配置系统环境变量,配置方法如下:1.编辑环境变量配置vim ~/.bash_profile 2.保存环境变量配置source ~/.bash_profile
iOS中如何hook代理方法 在iOS中要hook某个类的实例方法是比较简单的,直接交换它的IMP指针即可达到目的,例如:+ (void)load { static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ SEL originalSelector = @selector(viewWillAppear:); SEL swizzledSelector = @selector(hook_viewWillAppe
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.
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]
大数加减乘除算法(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
对于GCD中队列与线程的理解 队列(Dispatch Queue):指执行任务的等待队列,即用来存放任务的队列。队列是一种特殊的线性表,采用 FIFO(先进先出)的原则,即新任务总是被插入到队列的末尾,而读取任务的时候总是从队列的头部开始读取。每读取一个任务,则从队列中释放一个任务。队列的结构可参考下图任务:一段代码,本质上就是一系列指令在 GCD 中有两种队列:『串行队列』和『并发队列』。两者都符合 FIFO(先进先出)的原则。两者的主要区别是:执行顺序不同,以及开启线程数不同。串行队列(Serial Dispa...
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
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...
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
No “iOS Distribution“ signing certificate matching team ID “xxx“ with a private key was found 解决方法: 删除别人的打包证书创建自己的打包证书,这时自己的证书就是可用的了,可以进行打包了; 找到可用打包证书的人,从他的电脑上导出一个这p12文件给你,你用他的证书来进行打包; 以上两种方案肯定能解决这个问题,如果不能解决请重新打开Xcode。 ...
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...
Xcode12: CompileSwiftSources normal armv7 com.apple.xcode.tools.swift.compile 选中项目PROJECT—Build Settings—Excluded Architecture,设置release模式下Any iOS SDK的值为armv7,因为iOS14 SDK不再支持armv7架构的手机,所以需要将armv7剔除。
查看.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
Xcode 12 : error: ‘xxx/xxx.h‘ file not found or No such module ‘xxx‘ 最近几天为了适配iOS14,将Xcode11升级到了Xcode12,一编译果然还是熟悉的味道。
iOS界面刷新机制 当在操作 UI 时,比如改变了 Frame、更新了 UIView/CALayer 的层次时,或者手动调用了 UIView/CALayer 的 setNeedsLayout/setNeedsDisplay方法后,这个 UIView/CALayer 就被标记为待处理,并被提交到一个全局的容器去。苹果注册了一个 Observer 监听 BeforeWaiting(即将进入休眠) 和 Exit (即将退出Loop) 事件,回调去执行一个很长的函数:_ZN2CA11Transaction17observer_c
Swift属性重载 swift中有两种属性:存储属性和计算属性,它们都可以被重载,但是在重载方式上有一些不同。class Properties { //存储属性 var storedProperty: String? // 计算属性 var computedProperty: Bool { get { return true ...
使用UIPanGestureRecognizer手势时的注意事项 在iOS中,通常会使用pan手势来做控件拖拽的功能,但是在使用pan手势的时候,应当使用frame来进行布局而不是AutoLayout。特别是在拖拽的过程中,如果同时刷新拖拽视图内部的子控件,会导致拖拽出现问题,例如拖拽完回后自动回到初始位置。...
Swift自定义导航栏返回按钮图标 //写代码的时候Xcode没有提示这两个属性,但确实是可以设置的UINavigationBar.appearance().backIndicatorTransitionMaskImage = UIImage(named: "navigationBar_back_btn")UINavigationBar.appearance().backIndicatorImage = UIImage(nam...
pod 'filename used twice' build error 项目里一直存在一个很奇怪的问题,每次用pod导入一个新的第三方库,已经存在的第三方库就会报编译错误:'filename used twice' 以前以为是第三方库有问题,所以重新导入,问题得到了暂时的解决。但是指标不治本,每次pod新的第三方库,又会报这个错误。项目闲下来后仔细研究了下这个问题,发现是pod的project.pbxproj文件存在问题,重复引用第三方库的某些文件,所以导致...