Objective-C
文章平均质量分 62
shengkuiwang
这个作者很懒,什么都没留下…
展开
-
iOS_dispatch_group相关代码实现
目录`dispatch_group_create``_dispatch_group_create_with_count``dispatch_group_enter`代码块`dispatch_group_leave`代码块`_dispatch_group_wake``dispatch_group_notify``dispatch_group_notify_f``_dispatch_group_notify`代码dispatch_group_createdispatch_group_tdispa原创 2022-02-12 17:10:50 · 1243 阅读 · 0 评论 -
iOS_dispatch_semaphore 相关代码
目录`dispatch_semaphore_create`代码`dispatch_semaphore_wait`代码`dispatch_semaphore_signal`代码相关的一些宏定义dispatch_semaphore_create代码 信号量创建dispatch_semaphore_tdispatch_semaphore_create(long value){ dispatch_semaphore_t dsema; // If the internal value is原创 2022-02-12 17:01:22 · 1289 阅读 · 0 评论 -
iOS_dispatch_sync同步实现/死锁
dispatch_sync实现/死锁`dispatch_sync`方法实现调用`dispatch_barrier_sync`代码块`_dispatch_barrier_sync_f_inline`代码块`_dispatch_queue_try_acquire_barrier_sync`代码块`_dispatch_queue_try_acquire_barrier_sync_and_suspend`代码块`_dispatch_sync_f_slow`代码块`__DISPATCH_WAIT_FOR_QUEUE_原创 2022-01-09 15:33:07 · 1786 阅读 · 0 评论 -
Xcode_Xcode13_shell指令_“.a“文件的生成和合并
新增TARGET点击工程内TRTGETS区域的左下角+按钮,然后会弹出以下选择框,选中图示图标,并点击Next生成一个新的TARGET新增RunScript选中上一步生成TARGET,选择Build Phases,点击+,新增RunScript复制以下指令到RunScript,并修改TARGET_NAME#TargetNameTARGET_NAME=WSKStaticLibrary#输出文件夹路径OUT_DIR=${SRCROOT}/ProductsUNIVERSAL..原创 2021-12-25 14:27:54 · 625 阅读 · 0 评论 -
iOS_导入Framework出现的问题
问题提示信息:Building for iOS Simulator, but the linked framework ‘xxx.framework’ was built for iOS.解决方案:修改项目配置<Build Setting>里面的Validate Workspace为Yes,则正常编译原创 2021-12-24 14:54:31 · 1230 阅读 · 0 评论 -
Xcode_Xcode13_shell指令_framework生成以及合并
新增TARGET点击工程内TRTGETS区域的左下角+按钮,然后会弹出以下选择框,选中图示图标,并点击Next生成一个新的TARGET新增RunScript选中上一步生成TARGET,选择Build Phases,点击+,新增RunScript复制以下指令到RunScript,并修改FMK_NAME# 设置工作Target以及生成的framework文件名,这个必须根据target来修改FMK_NAME=WSKFramework# 生成framework临时工作区域WRK..原创 2021-12-23 16:47:53 · 2033 阅读 · 0 评论 -
iOS_MethodSwizzling_黑魔法坑点与解决方案
坑点1:多次进行方法交换,会将方法替换为原来的实现解决方法:利用单利进行限制,只进行一次方法交换// 解决坑点1+ (void)load{ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ [RuntimeTool wsk_methodSwizzlingWithClass:self oriSEL:@selector(wsk_oriFunction) swizzledSEL:@selec原创 2021-11-27 17:24:08 · 1811 阅读 · 0 评论 -
iOS_cache_t
目录方法缓存`cache_t`部分代码`cache_t`的结构`bucket_t`的结构代码`bucket_t`查找缓存`cache_t::expand()``cache_t::reallocate()``cache_fill_nolock`方法缓存cache_t在方法被调用后,cache_t会进行一次缓存缓存流程< cache_fill_nolock 代码流程>1、缓存入口cache_fill_nolock 进入,判断是否存在缓存,如果有,则return2、如果不存在缓存,原创 2021-10-30 17:04:55 · 1409 阅读 · 0 评论 -
iOS_类<Class>
目录类的结构属性、实例方法、协议以及类方法存储相关结构体代码实现`class_rw_t`代码实现`class_ro_t`代码实现`method_array_t`代码实现`property_array_t`代码实现`protocol_array_t`代码实现`list_array_tt`代码实现类的结构类Class是一个objc_class *类型的结构体指针 ,typedef struct objc_class *Class结构体objc_class继承自结构体objc_objectstrcut原创 2021-10-24 17:55:22 · 153 阅读 · 0 评论 -
iOS_isa结构
联合体与位域共用同一内存空间,联合体内占用空间最大的那个@interface Trnk : NSObject@property (nonatomic, assign) BOOL front;@property (nonatomic, assign) BOOL back;@property (nonatomic, assign) BOOL left;@property (nonatomic, assign) BOOL right;@end#define DirectionFrontMask原创 2021-10-23 18:41:59 · 1385 阅读 · 1 评论 -
iOS_内存对齐原则
内存对齐原则1、数据成员对齐规则:结构体(struct)或联合体(union)的数据成员,第一个数据成员放在 offset 为 0 的地方,后续每个数据成员存储的起始位置要从该成员大小或者成员的子成员大小(只要该成员有子成员,比如说数组、结构体等)的整数倍开始(比如int为4字节,则要从4的整数倍地址开始存储)2、结构体作为成员:如果一个结构里有某些结构体成员,则结构体成员要从其内部最大元素大小的整数倍地址开始存储(strcut a里存有 struct b,b里有结构体char,int 等,那么b应该从原创 2021-10-23 16:41:20 · 280 阅读 · 0 评论 -
iOS_iOS14.0适配
iOS14.0适配,记录!适配UIPageControl出现的问题:iOS14以后删除了pageImage 与currentPageImage,不能再通过KVC修改控制器的图片。解决方案:借助iOS14新增字段preferredIndicatorImage,我们可以修改指示器小圆点的大小以及形状,然后借助currentPageIndicatorTintColor与pageIndicatorTintColor来确认不同状态下小圆点的颜色。部分代码示例:::UIPageControl *pag原创 2020-09-21 15:31:45 · 2435 阅读 · 0 评论 -
iOS_日历中写入日程_简单功能实现
简单的实现在日历中写入日程1、添加隐私权限Privacy - Calendars Usage DescriptionPrivacy - Reminders Usage Description2、代码实现如下- (void)saveCalenda{ EKEventStore *eventStore = [[EKEventStore alloc] init]; __weak typeof(self) weakSelf = self; if ([eventStore respond.原创 2020-06-03 15:44:38 · 1641 阅读 · 0 评论 -
iOS_3DTouch使用
只支持iOS9.0以后的系统使用方法如下 // 创建item UIApplicationShortcutItem *item = [[UIApplicationShortcutItem alloc] initWithType:@"type1" localizedTitle:@"标题1" localizedSubtitle:@"副标题1" icon:[UIApplicationShortcutIcon iconWithType:UIApplicationShortcutIconTypeComp.原创 2020-05-28 17:05:04 · 314 阅读 · 0 评论 -
iOS_PDF文件合并
PDF文件合并// 返回值为合并后的pdf文件路径,存储在沙盒内- (NSString *)mergePDFFiles:(NSArray *)listOfPaths { // File paths NSString *fileName = [NSString stringWithFormat:@"合并后的文件%d.pdf",arc4random_uniform(100)]; NSString *pdfPathOutput = [[NSSearchPathForDirecto.原创 2020-05-25 16:43:30 · 544 阅读 · 0 评论 -
iOS_iOS9.0与iOS10.0+,TabBar层级对比
最近的项目需要支持iOS9.0,需要自定义TarBar,在进行自定义的过程中,出现了一些问题,其根本原因就是iOS9.0与iOS10.0+系统的差别,对TarBar进行层级的修改。如下图所示,可以看出。iOS10.0以后将背景图_UITabBarBackgroundView与顶部横线UIImageView视图进行合并,合并为_UIBarBackground。...原创 2020-05-13 14:20:33 · 245 阅读 · 0 评论 -
iOS_处理网络请求数据打印问题_记录用
//// WSKPrintJsonLog.h// SuperSaleApp//// Created by 王盛魁 on 2020/3/5.// Copyright © 2020 wangsk. All rights reserved.//#import <Foundation/Foundation.h>//// WSKPrintJsonLog.m// SuperSaleApp//// Created by 王盛魁 on 2020/3/5.// Cop原创 2020-05-12 14:57:41 · 478 阅读 · 0 评论 -
iOS_常用判断以及格式校验方法_记录用
空字符串转化+ (NSString *)convertNullString:(id)object{ if (!object) { return @""; } if (object && [object isEqual:[NSNull null]]){ return @""; }else if ([object isKindOfClass:[NSNull class]]){ return @""; }.原创 2020-05-12 14:51:53 · 386 阅读 · 0 评论 -
iOS_AES加解密_128位_ECB模式
AES加密分为128、129、256,只是标识符的不同而已。AES加密默认为CBC模式,添加一个标识即可变为ECB模式。ECB模式不需要偏移量。字符串处理一般为base64编码,字符集为UTF-8。代码示例如下://// AESTool.h//// Created by 王盛魁 on 2020/4/3.// Copyright © 2020 王盛魁. All right...原创 2020-04-09 18:19:11 · 1098 阅读 · 0 评论 -
iOS_获取HealthKit步数
1、修改证书,添加HealthKit权限。2、选中项目TARGETS,然后点击+Capability,搜索添加HealthKit3、调用实现如下:// .h文件#import <Foundation/Foundation.h>#import <HealthKit/HealthKit.h>#import <UIKit/UIDevice.h>NS_A...原创 2020-03-31 09:28:18 · 589 阅读 · 0 评论 -
iOS_截屏_获取截屏图片
iOS 截屏,并获取截屏图片// 1、添加系统通知[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(userDidTakeScreenshot:) ...原创 2020-03-29 16:01:48 · 722 阅读 · 0 评论 -
iOS_图片添加水印_文本倾斜
图片添加水印,文本无倾斜// MARK:图片添加水印+ (UIImage *)addWatermarketWithOriginImage:(UIImage *)originImage WaterText:(NSString *)waterText{ UIGraphicsBeginImageContextWithOptions(originImage.size, NO, 0); ...原创 2020-03-29 12:11:54 · 779 阅读 · 1 评论 -
iOS_计步_获取运动与健康
iOS获取本机的运动数据,一般是通过HealthKit或者运动与健康。获取HealthKit内的数据,需要修改证书,同时HealthKit内的数据源也来自于运动与健康。下面简单介绍运动与健康的调用代码记得添加隐私权限<key>NSMotionUsageDescription</key> <string>隐私权限</string>1、...原创 2020-03-24 16:26:00 · 1022 阅读 · 1 评论 -
iOS_XIB绘制UIScrollerView出现偏移一个状态栏高度
问题出现情况:1、无导航条,且全屏是一个滚动视图2、在利用xib绘制UIScrollerView时,且去除了安全区域,页面总是出现偏移一个状态栏高度。问题解决方式:1、代码if (@available(iOS 11.0,*)) { self.backScrollView.contentInsetAdjustmentBehavior = UIScrollViewContentIns...原创 2020-03-10 16:11:33 · 630 阅读 · 0 评论 -
iOS_XIB绘制边框颜色
1、打开xib文件,选择需要添加边框的视图控件,效果如图所示2、点击上图“+”号,添加属性// 圆角layer.masksToBoundslayer.cornerRadius// 边框layer.borderWidthlayer.borderColorFromUIColor3、添加完这些你会发现边框颜色并没有显示,还需要添加一些关于CALayer的延展文件,代码如下:@int...原创 2019-10-25 15:57:36 · 485 阅读 · 0 评论 -
iOS_应用TouchID解锁
第一步导入对应的头文件#import <LocalAuthentication/LocalAuthentication.h>第二步创建LAContext对象LAContext *context = [LAContext new]; context.localizedFallbckTitle = @"右侧按钮标题";localizedFallbckTitle 设置指纹解锁失败时,提示框的右侧按钮提示原创 2016-09-01 21:12:44 · 535 阅读 · 0 评论 -
iOS_校验手机号
///检测手机号码的合法性BOOL isValidMobile(NSString * _Nullable mobile){ /** * 移动号段正则表达式 */ NSString *CM_NUM = @"^((13[4-9])|(147)|(15[0-2,7-9])|(178)|(18[2-4,7-8]))\\d{8}|(1705)\\d{7}$"; /原创 2017-10-13 10:29:39 · 2349 阅读 · 0 评论 -
导入第三方类库,运行报错1609
报错信息如下: Undefined symbols for architecture i386:“_res_9_getservers”, referenced from:getdnssvraddrs(xpstl::vector&) in QAVSDK(xpnet.o)“_res_9_ninit”, referenced from:getdnssvraddrs(xpstl::vector&) in原创 2016-09-08 21:18:50 · 780 阅读 · 0 评论 -
iOS_判断手机是否越狱
在进行模拟器测试时,由于电脑内存在第二个以及第三个常见越狱文件,一直判断已越狱。// 常见越狱文件const char *examineBreak_Tool_pathes[] = { "/Applications/Cydia.app", "/Library/MobileSubstrate/MobileSubstrate.dylib", "/bin/bash", "/原创 2016-10-17 13:45:26 · 2824 阅读 · 2 评论 -
iOS_修改UIAlertController中Title和Message的样式
系统UIAlertController的标题和信息都是居中对齐的,而且属性便于我们去修改。除了使用KVC去修改对应的样式外,我们还可以获取到titleLbl和messageLbl去修改样式。获取titleLbl和messageLbl的方式如下 UIAlertController *alertController = [UIAlertController alertControllerWi原创 2017-10-10 18:16:14 · 813 阅读 · 0 评论 -
iOS_Runtime6_字典转化为模型应用
在<objc/runtime.h>中,我们通过Class的结构体内容,可以看到ivars指针指向包含了类中成员变量的结构体,通过它可以得到类中定义的成员变量,而Objective-C中提供了相应的API方法。原创 2017-08-22 20:16:02 · 388 阅读 · 0 评论 -
iOS_消除标签栏(tabBar)顶部黑线
标签栏原创 2017-09-29 15:59:13 · 714 阅读 · 0 评论 -
iOS_常用的小功能
打电话、发短信等原创 2017-09-27 21:00:11 · 359 阅读 · 0 评论 -
iOS_真机、模拟器判断宏定义
#if TARGET_IPHONE_SIMULATOR//模拟器 NSLog(@"模拟器");#elif TARGET_OS_IPHONE NSLog(@"真机");#endif原创 2017-09-19 18:55:01 · 663 阅读 · 0 评论 -
iOS_身份证号码校验
校验身份证号码格式是否正确,正确返回YES。原创 2017-09-13 15:42:21 · 587 阅读 · 0 评论 -
iOS_关键字nullable、nonnull、null_resettable、_Null_unspecified
关键字:nullable,作用:表示此值可以为空。nullable只能修饰对象,不能修饰基本数据类型。书写方式示例,如下:// 方式一:@property (nonatomic, strong, nullable) NSString* nameOne;// 方式二:@property (nonatomic, strong) NSString* _Nullable nameTwo;//原创 2017-10-24 10:10:19 · 883 阅读 · 0 评论 -
iOS_UIWebView加载Html乱码文件
现象:使用WKWebView加载乱码Html文件,可以显示出来,但是页面显示字体比较小,不符合预期的效果,换用UIWebView对乱码Html文件进行加载,但是由于是乱码文件,直接进行文件加载,显示出来的效果是乱码。结果方案如下UIWebView *view = [[UIWebView alloc]initWithFrame:CGRectMake(0, 0, BXScreenW, BXScre...原创 2019-09-19 18:26:13 · 632 阅读 · 0 评论 -
iOS_WKWebView加载工程内Bundle里面的文件,文件路径包含"#"
WKWebView加载本地文件,可以参考博文iOS_WKWebView加载本地网页1、将HTML文件添加至工程内,本人是创建了一个LoactionHtml.Bundle用于存放html资源文件,获取工程文件内index.html的方式如下<每个人的工程文件目录不同,具体按照自己的来>NSString *path = [[[NSBundle mainBundle] pathFor...原创 2019-08-24 16:10:42 · 1162 阅读 · 0 评论 -
iOS_WKWebView_原生与JS的交互_可以立刻获取原生返回值
WKWebView系统自带API参考:https://blog.csdn.net/baihuaxiu123/article/details/51286109使用第三方框架WebViewJavascriptBridge,链接内有详细的使用介绍WebViewJavascriptBridge以上交互方式都是异步的,JS无法立刻获取原生返回值。现在介绍如何立刻获取原生返回值3.1、遵循对应的协...原创 2019-08-06 15:26:25 · 3488 阅读 · 2 评论 -
iOS_修改UISearchBar背景为透明色
for (UIView *subview in searchBar.subviews) { for(UIView* grandSonView in subview.subviews){ if ([grandSonView isKindOfClass:NSClassFromString(@"UISearchBarBackground")]) { ...原创 2019-03-26 10:47:47 · 864 阅读 · 0 评论