iOS开发
iOS开发项目实战、技术分享探讨
zhaocarbon
C、C++、ObjectiveC、swift、html、css、javascript、C#、Java、vue、jquery、uniapp、微信小程序……
展开
-
snowFlake OC 雪花算法 实现
注意,41 位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截) 得到的值,这里的的开始时间截,一般是我们的 id 生成器开始使用的时间,由我们程序来指定的(如下面程序 IdGenerator 类的。原生的 Snowflake 算法是完全依赖于时间的,如果有时钟回拨的情况发生,会生成重复的 ID,市场上的解决方案也是不少。由于 long 基本类型在 Java 中是带符号的,最高位是符号位,正数是 0,负数是 1,所以 id 一般是正数,最高位是 0。原创 2023-04-08 10:39:21 · 515 阅读 · 0 评论 -
OC RSA加密解密
OC RSA加密解密原创 2022-11-23 10:58:02 · 1166 阅读 · 0 评论 -
ERROR ITME-90205:“Invalid Bundle .The bundle at “XXXXXXXXX.framework“contains disallowed nested bund
ERROR ITME-90205:"Invalid Bundle .The bundle at "XXXXXXXXX.framework"contains disallowed nested bundERROR ITME-90206:"Invalid Bundle .The bundle at "XXXXXXXXX.framework"contains disallowed nested bundERROR ITME-90685:There is more than one bundle with原创 2022-11-04 21:57:42 · 487 阅读 · 0 评论 -
iOS16适配之 [[UIBarButtonItem alloc]initWithTitle 卡死
iOS16适配之 [[UIBarButtonItem alloc]initWithTitle 卡死原创 2022-09-26 19:30:15 · 1580 阅读 · 10 评论 -
移动端 realm数据库使用及解耦,跨线程安全使用 OC realm
最近在搞IM,因为消息量多,实时读写及并发相当的多,原项目封装使用了FMDB,但这个东西对比于并发多线程读写实在不敢恭维,动不动出现锁导致卡顿,体验极期扯蛋。虽然实现队列读写,但是还是管不住这东西的缺陷。。于是乎寻找替换方案。首先考虑了WCDB,即微信团队发布的开源数据库,但是使用起来相当的别扭,所有属性字段得一个一个的去使用他的宏去声明,工作太繁锁,相信软件及开源的初衷一定是减少开发者的代码耦合及胶水坨坨。再次考虑都查了Realm这个开源库,库本身为500多M,使用后各种崩溃,100%都是跨线程使用,虽然原创 2022-06-21 15:56:47 · 1166 阅读 · 0 评论 -
UITableViewIndex修改frame、sectionIndexTitlesForTableView位置
效果展示 :系统默认的快速定位功能位置太过靠右位置,特定情况下,我们需要调整其位置,如何做呢?请看代码:@interface UITableView (IndexViewFrame)@end#import <objc/runtime.h>@implementation UITableView (IndexViewFrame)+ (void)load{ static dispatch_once_t onceToken; dispatch..原创 2022-05-26 12:15:43 · 531 阅读 · 0 评论 -
GPUImage实现人脸实时识别
最近在研究OC的生物活检方面的实现,发现SDK中自带有相应的功能类,则进行了调研与实现。实现过程中发现一个比较坑人的一个地方,就是GPUIMAGE这个框架里面对于视频采集使用的YUV格式,而YUV格式无法与OC的类库进行配合实现实时识别。现在我们来剖析一下GPUImageVideoCamera的实现:@interface GPUImageVideoCamera : GPUImageOutput <AVCaptureVideoDataOutputSampleBufferDeleg.原创 2022-05-05 15:20:02 · 612 阅读 · 0 评论 -
OC 识别网页连接
OC 识别网页连接原创 2022-04-29 11:26:48 · 388 阅读 · 0 评论 -
OC 下载iCloud 图片和视频
在视频选择的时候遇到了一个不太容易发现的bug,产生的原因是由于手机内存小,而用户又打开了相册同步iCloud,在这时,如果本地可用内存过小,会导致将本地相册中的图片或视频删除只留缩略图,如果App调用的时候想要选取这种图片就需要从iCloud云中进行下载,才能获取原图或原视频.// get Image[[PHImageManager defaultManager] requestImageDataForAsset:asset options:nil resultHandler:^(NSData.原创 2022-04-25 11:59:44 · 474 阅读 · 0 评论 -
OC 画任意弧度的弧
CGFloat sz = MIN(self.view.bounds.size.width, self.view.bounds.size.height)/2; CGRect ft = CGRectMake((self.view.bounds.size.width-sz)/2, 120, sz, sz); UISpinnerAnimationView *c1View = [[UISpinnerAnimationView alloc] initWithFrame:ft]; [c1View.原创 2022-04-19 10:34:26 · 130 阅读 · 0 评论 -
OC 实现扫雷达扫描动画
先上效果,如下:忽略CSDN这个动画展示效果,掉帧严重,导致下面的动画不流畅。上代码:typedef NS_ENUM(NSInteger,UISpinnerAnimationViewAnimation){ UISpinnerAnimationViewAnimationSpinner,//拖尾绕圈 UISpinnerAnimationViewAnimationRador, //雷达};@interface UISpinnerAnimationView : UIVie..原创 2022-04-19 10:27:14 · 978 阅读 · 0 评论 -
OC 环形等待UI spiner动画
看一下效果:使用方法:UISpinnerAnimationView *evi = [[UISpinnerAnimationView alloc] initWithFrame:CGRectMake((self.view.frame.size.width-160)/2, 160, 160, 160)];[self.view addSubview:evi];[evi startSpinerAnimation];源代码:@interface UISpinnerAnimationV..原创 2022-04-12 18:08:30 · 1966 阅读 · 0 评论 -
HTTP请求之GET及POST详解
GET方式:请求URL固定,所有参数均后缀在URL后面,以key=value&key1=value1&key2=value2方式拼装POST方式:1、请求URL固定,所有参数均放在http的请求报文中,即放在了body中!所有参数以json或者XML格式序列化文本串或form-data传输。2、请求URL不固定,部分参数会放在URL中,即http://domain.com/userlogin/login?sign=xxx×tamp=xxx以拼装成最终的.原创 2022-03-04 17:01:47 · 3427 阅读 · 0 评论 -
XCODE 编译慢问题优化解决
1、 项目中使用了pch导致编译慢的解决办法,通过设置Build Setting -> Precompile Prefix Header -> YES2、设计编译优化等级(????)不要再项目中或者静态库中使用-O4,因为这会让Clang链接Link Time Optimizations (LTO)使得编译更慢,通常使用-O3。注意:在设置编译优化之后,XCode断点和调试信息会不正常,所以一般静态库或者其他Target这样设置。作者:纸简书生链接:htt原创 2022-02-19 17:23:44 · 3256 阅读 · 0 评论 -
UINavigationBar 导航栏背景设置
之前使用好好的项目,导航栏配置什么的也没有啥问题,最近突然发现导航栏配置无效了,尤其是背景色调整,无论如何也显示不了了。遂进行排查,现将代码整理:核心代码为:if (@available(iOS 13.0, *)) { UINavigationBarAppearance *appperance = [[UINavigationBarAppearance alloc]init]; appperance.backgroundImage = [UIImage i原创 2022-01-05 14:16:41 · 1336 阅读 · 3 评论 -
SDWebImage URL 下载不显示图片
[self sd_setImageWithURL:url placeholderImage:image completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {if (completion) {completion(image,error,cacheType,imageURL);}}];以上是最常用的请求方法,但是有时候会发现block返回的image是空的,...原创 2021-12-30 00:11:21 · 569 阅读 · 0 评论 -
iOS语音转文字实现
iOS语音转文字实现原创 2021-12-27 11:27:55 · 4390 阅读 · 0 评论 -
OC 是否存在某个头文件 是否定义了某个头文件
OC 是否存在某个头文件 是否定义了某个头文件原创 2021-12-07 17:39:15 · 363 阅读 · 0 评论 -
SQLITE3插入、查询效率的优化方法
插入篇:1、sqlite3_exec()通常,我们使用sqlite3_exec()函数来处理数据的插入操作,该函数直接调用sql语句对数据进行插入,所以使用起来很方便,插入100w条数据for( i = 0; i < 1000000; i++){ snprintf(sqlcmd, sizeof(sqlcmd), "insert into testinfo values(%d, %d, '%d', '%s')", i, i*2, i*10, buf); sqlite3_exe...原创 2021-11-14 20:47:09 · 6199 阅读 · 0 评论 -
OC url匹配分割
NSString *cnt = @"http://baidu.com23412245254"; NSArray *ranges = [cnt mutableRangeOfString:@"((http[s]{0,1}|ftp)://[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4})(:\\d+)?(/[a-zA-Z0-9\\.\\-~!@#$%^&*+?:_/=<>]*)?)|(www.[a-zA-Z0-9\\.\\-]+\\.([a-zA-Z]{2,4}.原创 2021-11-12 18:14:52 · 1832 阅读 · 0 评论 -
OC iOS 解析HTML 获取HEAD 页面标题 描述 网站图标
引入第三方库:#import "TFHpple.h"NSMutableDictionary *webObj = [NSMutableDictionary dictionaryWithCapacity:0]; NSURL *url = [NSURL URLWithString:@"https://www.jd.com/"]; NSError *err = nil; NSString *cnt = [NSString stringWithContentsOfURL:url.原创 2021-11-12 12:52:57 · 2523 阅读 · 2 评论 -
UITextView显示偏移问题
UITextView使用时,左侧或者周围出现偏移问题,如下进行修正即可: [self.contentTextView.textContainer setLineFragmentPadding:.0]; [self.contentTextView.layoutManager setAllowsNonContiguousLayout:YES];原创 2021-11-12 10:48:52 · 561 阅读 · 0 评论 -
OC获取音频文件总时长
NSDictionary *dic = @{AVURLAssetPreferPreciseDurationAndTimingKey:@(YES)}; AVURLAsset *audioAsset = [AVURLAsset URLAssetWithURL:self.musicModel.contentURL options:dic]; [NSThread detachNewThreadWithBlock:^{ CMT...原创 2021-09-06 11:30:09 · 345 阅读 · 0 评论 -
UITextView 获取点击处文字索引
最近在处理这么一个页面:需求为在点击蓝色名称的时候,需要跳转到对应的用户详情页面去,这个怎么实现呢?实现思路:整体显示使用UITextView这个控件,使用富文本的方式拼接字符串。同时需要在全局数据模型中记录每一个人的名称在这个富文件字符串的位置,当点击的时候,精确获取到点击的文字索引,如果这个索引落在了这个用户的名字位置,则将用户信息带出进行业务逻辑跳转。因为富文本的拼接比较简单。下面说说具体怎么获取到UITextView精确点击位置索引:细看如下的代码:U...原创 2021-08-28 10:36:18 · 398 阅读 · 0 评论 -
UITextView 水平居中对齐
NSMutableAttributedString *attr = [[NSMutableAttributedString alloc] initWithString:msg];[attr addAttribute:NSForegroundColorAttributeName value:RGB(130, 130, 130) range:NSMakeRange(0, msg.length)];[attr addAttribute:NSFontAttributeName value:SysInfoMes.原创 2021-08-28 10:25:26 · 651 阅读 · 0 评论 -
textField: shouldChangeCharactersInRange: replacementString出现圆圈数字、九宫格键盘圆圈数字、禁止输入emoji表情等
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string原创 2021-08-26 18:18:04 · 496 阅读 · 0 评论 -
iOS UIImage 马赛克 滤镜
1、方案一- (UIImage *)pixelateImage:(UIImage *)image pixelateLevel:(CGFloat)pixelateLevel{ CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"]; [filter setValue:image.CIImage forKey:kCIInputImageKey]; [filter setValue:[NSNumber numberWi原创 2021-08-12 15:34:49 · 191 阅读 · 0 评论 -
OC正则 以@开头 空格结束的字符匹配
IM里面,经常会用到@所有人功能,对于@关键字要进行常亮,这就要求我们不得不快速匹配获取对应的range!以下给出参考源码:@"@[^\\s]+\\s?" NSString *textStr = @"@1111111 @24234234234 @433 @rrr @"; NSMutableAttributedString *attStr = [[NSMutableAttributedString alloc]initWithString:textStr]; [attSt原创 2021-08-04 11:19:34 · 535 阅读 · 0 评论 -
OC 获取手机运营商信息
/** #import <CoreTelephony/CTTelephonyNetworkInfo.h> #import <CoreTelephony/CTCarrier.h> sim卡信息 */+ (NSDictionary *)getSIMCardInfo{ CTTelephonyNetworkInfo *info = [[CTTelephonyNetworkInfo alloc] init]; CTCarrier *carrier = nil; .原创 2021-07-23 15:20:57 · 1459 阅读 · 0 评论 -
iOS网络类型、信号强度读取
最近在搞IM方面的东西,有时候想对于网络信号进行监测,以下给出源码:+ (NSInteger)signalStrength{ if(@available(iOS 13.0, *)) { return [self signalStrengthThan13]; } else { return [[self signalStrengthLess13] integerValue]; }}+ (NSInteger ).原创 2021-07-14 16:54:32 · 2641 阅读 · 15 评论 -
UISlider自定义、分段式滑动
最近又在开发一个电子书阅读器,设计师设计的UI很美观漂亮,但是无奈系统自带的滑动进度控制器太丑,不好看,不得不进行二次封装处理达到设计师的要求!下面就是系统自带的UI展示,可以看出很音调,难看!也许是苹果的设计极简主义。奈何对于产品而言,这样的展示太不符合要求,以下将对本次的开发做以记录有兴趣的同学可以参考研究。先看看实现的效果1、2、3!iconSize()是一个内联函数,其实现目的是在不同设备上输出不同的高度大小,比如一个小图标在320X640的上大小为34,而在1242X2208的设原创 2021-07-04 16:25:01 · 1486 阅读 · 2 评论 -
UIAlertController自定义、替换方案
UI交互做为与用户展示的核心内容,往往需要与设计密切相关,实际开发过程中,我们经常要用到alertview这种浸入式警告来展示一些核心内容以打断用户的操作。但是官方自带的UIAlertController自定义方面简直惨不忍睹。。。展示内容无法更加丰富,按钮样式无法高度自定义。。这些缺陷使的我们的UI开发与设计师的做法往往出现差异,使的产品不是那么完美 ,下面就给出参考实现:本实现支持MRC及ARC模式,放心使用。项目中用到的一些类的扩展,如#import "NSExtentionSloter.h"可原创 2021-06-25 16:46:00 · 1724 阅读 · 4 评论 -
OC 清空NSString 所有开头处的回车换行
有时候,我们的列表显示单行文本,而有时候,出现的数据竟然开头处出现换行符,这个时候,我们就不得不进行字符串处理,删除掉开头处所有的换行符。故实现以下方法://删除消息开头处所有的换行符,有多少清多少- (void)deleteNewlineCharacterAtBegin:(NSString **)text{ while ([*text length] > 0 && [[*text substringToIndex:1] isEqualToString:@"\n"])原创 2021-06-18 17:13:17 · 255 阅读 · 0 评论 -
iOS用户协议及隐私政策 alertview
随着苹果对于APP的规范越来越严,在app首次启动的时候,我们需要立即在默认的启动页面完成后,展示协议、隐私政策声明,而系统自带的UIAlertView明显不能够支撑我们的要求,这个时候,就必不可少的需要我们自己...原创 2021-06-10 17:13:32 · 3328 阅读 · 11 评论 -
UITextView 点击事件 点击文字
因为UITextView这个控件可以正常与HTML进行交互,有时候,当我们点击它的时候,想要跳转到某个指定页面,这个时候,点击精确到某个文字,很有必要。以下给出相关的参考代码:原创 2021-06-07 11:49:49 · 1085 阅读 · 0 评论 -
OC 性能优化
一、CPU和GPU 的介绍1.1、在屏幕成像的过程中,CPU和GPU起着至关重要的作用 CPU(Central Processing Unit,中央处理器),对象的创建和销毁、对象属性的调整、布局计算、文本的计算和排版、图片的格式转换和解码、图像的绘制(Core Graphics) GPU(Graphics Processing Unit,图形处理器),纹理的渲染,说白了就是界面的展示 CPU和GPU的机制图 在iOS中是双缓冲机制,有前帧缓存、后帧缓存 ..转载 2021-05-18 18:50:56 · 808 阅读 · 0 评论 -
This tool must be run as root
最近制作mac os big sur进行U盘安装时,出现This tool must be run as root.这里先说说怎么制作U盘安装系统!准备工作在创建macOS U盘启动之前,必须拥有一个U盘。U盘大小 > 16G U盘确保 不含有重要数据,因为会初始化U盘 下载macOS 系统一、打开App Store 搜索 macOS Big Sur,点击查看,再点击获取。等待下载完成,下载完成后先不要启动安装,下载完成后安装程序可能自动开始,这时按“command”+.原创 2021-04-09 11:45:41 · 1866 阅读 · 2 评论 -
UITabBarController 仿钉钉 tabbar 上下滑动自定义更多操作
最近公司的OA项目,产品要求按照钉钉实现此功能,具体请查看IOS端的钉钉app,上下滑动tabbar,可以拉出更多的操作按钮。这个比较高级。实现思路无非两个:1、自己写一个基于UIViewController的tabbar控制器2、对UITabBarController视图组织进行重构在这里,我使用的是第二种方式。请按照以下步骤添加代码即可:1、先自定义一个UITabBar,注意此处必须自定义,因为我们滑动调整tabbar坐标的时候,会出现抖动,为避免抖动,我们需要处理其set.原创 2021-03-22 17:27:29 · 1036 阅读 · 9 评论 -
OC 将不定层次未知深度的json数据转化为单层结构
有如下数据结构,请按照要求将其输出为指定结构数据,并且注意可以在任意修改给定数据层级及深度时,代码亦可正常运行输出正确的结果。要求输出数据结构示例为:如数据结构: /d b \e / a \ c转化为a->b->d、a->b->e、a->c原始给定输入测试数据{ "name":"node", "children":[ { "原创 2021-03-19 15:57:11 · 166 阅读 · 0 评论 -
OC KVC和KVO
写在前面: 关于KVC和KVO各种博客多了去了,重新整理下,就当是温习一下吧,不对的地方请指教,喜欢的点个喜欢什么也是挺好。一,KVCKVC也就是key-value-coding,即键值编码,通常是用来给某一个对象的属性进行赋值,例如有人这么一个类,其对外有两个属性,姓名和年龄,我们在创建了一个人p后可以通过点语法直接给p赋值。Person *p = [[Person alloc] init];p.name = @"张三";p.age = 20;我们也可以通过kvc给这个人.转载 2021-03-10 14:19:21 · 157 阅读 · 0 评论