![](https://img-blog.csdnimg.cn/20200108084038435.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
个人OC知识梳理
个人闲暇时期写写文字
Coding_Physical
一个拥有六块腹肌的IT男
展开
-
layoutIfNeeded 和 sizeToFit 的优缺点
layoutIfNeeded和sizeToFit是UIKit中用于更新视图布局的方法,它们的优缺点如下:原创 2023-12-01 11:21:07 · 234 阅读 · 0 评论 -
SJVideoPlayer控制器实现短视频列表心路历程
前言:从遇到的问题着手,阐述解决方案。问题一:如何实现列表横屏?该页面VC需要支持横屏- (BOOL)prefersHomeIndicatorAutoHidden { return YES;}- (BOOL)shouldAutorotate { return YES;}- (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientatio原创 2022-05-24 16:43:47 · 1109 阅读 · 0 评论 -
学习笔记之网络架构
一、get post请求的区别http网络请求分成两块,head和bodyget 数据存在head 中 限定2K;post数据存在body中 不限大小。二、NSURLSessionDataTask 对象发送请求 调用resume方法背后http传输过程第一步、请求DNS服务器换回IP第二步、tcp建立连接第三步、发送http head第四步、发送一段空行第五步、发送http body服务器接受到我们的数据1、处理 服装http data2、发送http head原创 2022-02-08 11:22:52 · 398 阅读 · 0 评论 -
block-循环引用的三种解决方案
一、__weak- (void)func1{ __weak typeof(self) weakSelf = self; self.block = ^{ NSString *newStr = [NSString stringWithFormat:@"6666%@",weakSelf.name]; }; self.block(); }block持有一个weak 对象在释放的时候可以打破彼此强引用二、_原创 2022-02-01 22:15:58 · 3859 阅读 · 0 评论 -
技术随笔-inline extern static
在IOS开发的过程中 会用到CG_INLINE函数,通常在h文件定义,来预编译函数,这么做的目的是编译不会造成语义上的歧义,提高效率。#if !defined(CG_INLINE)# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L# define CG_INLINE static inline# elif defined(__cplusplus)# define CG_INLINE static原创 2022-01-21 17:51:49 · 291 阅读 · 0 评论 -
基于MQTT提高客户端和服务器之间推送可靠性
一、MQTT简介MQTT翻译过来叫消息队列遥测传输是基于发布和订阅范式的消息协议,它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下二设计的发布/订阅型消息协议。MQTT协议是为大量计算能力有限,且工作在低带宽,不可靠网络的远程传感器和控制设备通讯而设计的协议具有以下特性:1、使用发布/订阅消息模式,提供一对多的消息发布,接触应用程序耦合2、对负载内容屏蔽的消息传输3、使用TCP/IP提供网络链接4、有三种消息发布的服务质量5、小型传输,开销很小(固原创 2022-01-02 16:16:46 · 3680 阅读 · 0 评论 -
OC ShortCut 项目实战
一、shortcut系统版本支持shortcut是在iOS9推出的app快捷入口,基于长按app图标弹出快捷入口列表,可以自定义图标和文本,以及跳转方法。二、shortcut实现创建图标// icons with my own images,icon size 35*35 UIApplicationShortcutIcon *icon1 = [UIApplicationShortcutIcon iconWithTemplateImageName:@"icon1"];创建标识和原创 2022-01-01 13:32:45 · 3857 阅读 · 0 评论 -
TextView增加placeholder
//// CustomTextView.m// //// Created by Oliver on 2021/5/27.//#import "CustomTextView.h"@implementation CustomTextView// xib 创建- (void)awakeFromNib { [super awakeFromNib]; //添加监听,在文字编辑时进行监听 [[NSNotificationCenter defaultCenter...原创 2021-07-01 18:59:05 · 320 阅读 · 0 评论 -
RACObserve 观察者模式--KVO
需求:在家装选装方案的时候监听总价值及时展示技术实现:[RACObserve(self.viewModel, totalPrice) subscribeNext:^(id _Nullable x) { @strongify(self) if (x) { self.priceView.hidden = NO; } [self reloadData]; }];RACObserve 源码...原创 2021-06-25 15:11:45 · 2861 阅读 · 0 评论 -
WKWebVIew 获取网页标题
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation { // 获取标题 [self getTitle];}// 获取标题- (void) getTitle { MJWeakSelf NSString *titleJs = @"document.title"; [self.wkWebView evaluateJavaScript:titleJs c.原创 2021-06-25 11:12:55 · 1560 阅读 · 0 评论 -
基于字符序列组装字典
+ (NSDictionary *)func:(NSString *)firstArg, ... { firstArg = [firstArg stringByReplacingOccurrencesOfString:@" " withString:@""]; NSArray *keys = [firstArg componentsSeparatedByString:@","]; NSMutableDictionary *dic = [NSMutableDictionary dic.原创 2021-06-24 19:13:04 · 122 阅读 · 0 评论 -
iOS json转成字典对象精度丢失问题
+ (NSNumber *)reviseNumber:(NSNumber *)number { if (!number) {return nil;} double doubleConversionValue = [number doubleValue]; NSString *doubleString = [NSString stringWithFormat:@"%lf", doubleConversionValue]; NSDecimalNumber *decNumber..原创 2021-06-24 18:53:53 · 362 阅读 · 0 评论 -
debug摇一摇手势 弹出环境切换选择
#if DEBUG- (BOOL)canBecomeFirstResponder{ return YES;}- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { //检测到摇动开始 if (motion == UIEventSubtypeMotionShake){ // your code UINavigationController *nav = (UINa.原创 2021-06-24 17:45:46 · 194 阅读 · 0 评论 -
使用__has_include来检查项目是否引入某个类
+ (NSString *)getAccountId{#if __has_include(<ZLUserCenter/ZLUserCenter.h>) return userInfo.accountId;#else return nil;#endif}原创 2021-06-24 14:38:06 · 521 阅读 · 0 评论 -
NSDictionaryOfVariableBindings
/* This macro is a helper for making view dictionaries for +constraintsWithVisualFormat:options:metrics:views:. NSDictionaryOfVariableBindings(v1, v2, v3) is equivalent to [NSDictionary dictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", v3, @"v3", nil];.原创 2021-06-22 19:02:13 · 190 阅读 · 0 评论 -
RACCommand 源码阅读
//// RACCommand.h// ReactiveObjC//// Created by Josh Abernathy on 3/3/12.// Copyright (c) 2012 GitHub, Inc. All rights reserved.//#import <Foundation/Foundation.h>@class RACSignal<__covariant ValueType>;NS_ASSUME_NONNULL_BEGIN.原创 2021-06-22 18:59:05 · 97 阅读 · 0 评论 -
NSAssert源码和使用
#define NSAssert(condition, desc, ...) \ do { \ __PRAGMA_PUSH_NO_EXTRA_ARG_WARNINGS \ if (__builtin_expect(!(condition), 0)) { \ [[NSAssertionHandler currentHandler] handleFailureInMethod:_cmd \ object:self file:@(__FILE_NAME__) \ l.原创 2021-06-22 17:40:05 · 132 阅读 · 0 评论 -
一个页面的分块代码编辑区域
#pragma mark - UI#pragma mark - 代理协议#pragma mark - 事件响应#pragma mark - 其他私有方法#pragma mark - setter & getter#pragma mark - 内存管理原创 2021-06-22 15:27:25 · 145 阅读 · 0 评论 -
OC 基础知识梳理
一、ViewController的生命周期二、OC的关键字三、计算机网络层级四、两个子视图找到同一个VC五、判断block的类型liu原创 2021-06-15 22:10:12 · 473 阅读 · 2 评论 -
Https笔记
一、非对称加密特点001 任何经过A公钥进行加密的信息,只有A的私钥进行解密002 任何有公钥的人可以确认对方发送的信息是否被私钥加密二、https流程图原创 2021-06-14 09:35:33 · 99 阅读 · 0 评论 -
IOS设计模式之工厂模式
工厂模式个人理解:基类工厂---->建立具体工厂---->生产具体产品---->产品拥有那些具体功能BaseFactory原创 2021-06-08 15:02:52 · 118 阅读 · 0 评论 -
IOS设计模式之装饰器模式
装饰器模式:某个类A,开发者用一个装饰器类将A作为属性引入到.m文件中,将A类的API重写,但是调用还是通过A的实例对象调用API。这样做的好处就是可以更好的保护类A,bu hiu原创 2021-06-08 10:22:27 · 330 阅读 · 0 评论 -
IOS设计模式之适配器模式
适配器是为了 兼容不同Model的API,适配器通过代理形成统一的属性props一、定义一个协议二、定义业务适配器三、继承业务适配器建立原创 2021-06-07 17:05:07 · 283 阅读 · 0 评论 -
IOS 常用设计模式
https://www.jianshu.com/p/9c4a219e9cf9转载 2021-06-07 14:26:04 · 116 阅读 · 0 评论 -
后台监听网络请求日志报错如何分析
URL:接口URLorg.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported at原创 2021-06-04 14:18:14 · 276 阅读 · 0 评论 -
IOS 组件化方案
https://juejin.cn/post/6844903716860985352转载 2021-06-04 09:35:53 · 88 阅读 · 0 评论 -
网络层优化
https://www.cnblogs.com/ziyi--caolu/p/8058577.html转载 2021-05-24 14:24:47 · 137 阅读 · 0 评论 -
OC Swizzle实战
前言:在项目中开发中会遇到编辑框触发编辑后白屏,或者其他方式触发出现白屏的情况.通过UI栈追踪器,看到很多视图控制器叠加在一起,不好入手排查,想想有没有其他方式进行更加高效排查呢?开始从视图控制器生命周期的角度去排查,bug显示就是那一瞬间白屏,视图控制器其中有两个很重要的方法viewDidLoad和viewWillAppear方法,可以捕获并替换成自己写的方法然后自己进行排查操作.关...原创 2020-01-04 09:59:33 · 1968 阅读 · 0 评论 -
IOS-组件化架构漫谈
https://www.huaweicloud.com/articles/72bcbf5778798bfe987b3885fff8386c.html转载 2021-05-24 11:05:46 · 109 阅读 · 0 评论 -
基于Target-Action 简化接口网络请求
一、接口URL自定义一个.H文件二、各模块接口调用定义一个handleM类,该类增加一个请求方法- (void)__requestWith:(NSString *)url dic:(NSMutableDictionary *)dic sel:(SEL)sel isPost:(BOOL)isPost{ self.sel = sel; NSMutableDictionary *dicp = @{}.mutableCopy; NSString原创 2021-05-23 16:23:26 · 189 阅读 · 0 评论 -
研读CTMediator 源码
原理基于Runtime 实现模块Targe_模块-Action_方法 实现 可以让不同模块之间耦合度降低两个核心方法1。本地组件调用入口- (id _Nullable )performTarget:(NSString * _Nullable)targetName action:(NSString * _Nullable)actionName params:(NSDictionary * _Nullable)params- (id)performTarget:(NSString *)targ..原创 2021-05-23 15:46:32 · 141 阅读 · 1 评论 -
IOS 判断手机是否开了三方代理
- (BOOL)getProxyStatus:(NSString *)url { NSDictionary *proxySettings = (__bridge NSDictionary *)CFNetworkCopySystemProxySettings(); NSArray *proxies = (__bridge NSArray *)(CFNetworkCopyProxiesForURL((__bridge CFURLRef _Nonnull)([NSURL URLWith.原创 2021-05-21 16:56:29 · 1210 阅读 · 0 评论 -
IOS App 打包和签名
一、沙盒IOSApp都是在沙盒里运行,这样可以确保App运行在一个受限和安全的空间里,通常情况下App只能访问沙盒里的文件系统,当App需要访问系统资源的时候,必须通过权限管理模块授权,常用授权有以下几类:001 照相机,麦克风以及传感去等硬件002 网络访问003 联系人,日程表盒邮件系统App的数据004 地理位置信息,推送通知,Healthkit以及HomeKit等服务当 App 需要访问各种资源的时候,iOS 系统会询问 App 一些重要的问题来判断是否能通过权限检查。那谁能原创 2021-05-21 10:40:55 · 193 阅读 · 0 评论 -
IOS runtime
001 runtime实质Runtime 就是去解决如何在运行时期找到调用方法这样的问题。Runtime 的核心就是 objc_msgSend 函数,通过给类发送 SEL 以传递消息,找到匹配的 IMP 再获取最终的实现。O(1)复杂度对于实例变量有如下的思路:instance -> class -> method -> SEL -> IMP -> 实现函数‘002 消息传递向一个对象发送消息时,Runtime 会根据实例对象的 isa 指针找到其所原创 2021-05-13 15:48:38 · 102 阅读 · 0 评论 -
IOS 离屏渲染
application 主要是在CPU操作,而到Render service CoreAnimation会将具体操作转换成发送给GPU的draw Calls ,CPU和GPU处在同一个流水线。离屏渲染含义:App->offscreen Buffer->Framebuffer如果要在显示屏上显示内容,至少需哟啊一块与屏幕像素数据量一样大的framebuffer,作为像素数据存储区,这也是GPU存储渲染结果的地方,但是有时候面临一些限制,无法直接将渲染结果写入Framebuffer,而...原创 2021-05-13 10:46:32 · 327 阅读 · 0 评论 -
静态分析工具 Oclint 实操
一、安装brew tap oclint/formulaebrew install oclint二、使用 在项目文件目录下oclint -report-type html -o AddNotesViewController-report.html AddNotesViewController.m三、结果分析OCLint ReportSummaryTotal Files Files with Violations Priority 1 Priority 2原创 2021-05-12 18:24:33 · 231 阅读 · 0 评论 -
研读 项目名-LinkMap-normal-x86_64.txt
一、生成 Link Map File在Xcode的配置中Target -> Build Setting -> Linking将Write Link Map File设置为YES来生成Link Map File,运行代码即可生成Link Map File二、查看 Link Map File文件cd/Users/maochengfang/Library/Developer/Xcode/DerivedData/learnDISsemaphore-bamrvwubjyvskafwmm...原创 2021-05-12 16:18:31 · 730 阅读 · 4 评论 -
IOS RunLoop学习笔记
Runloop 和线程的关系?一个线程对应一个 Runloop。 主线程的默认就有了 Runloop。 子线程的 Runloop 以懒加载的形式创建。 Runloop 存储在一个全局的可变字典里,线程是 key ,Runloop 是 value。RunLoop的运行模式RunLoop的运行模式共有5种,RunLoop只会运行在一个模式下,要切换模式,就要暂停当前模式,重写启动一个运行模式- kCFRunLoopDefaultMode, App的默认运行模式,通常主线程是在这个运行模式下运原创 2021-05-12 15:05:54 · 152 阅读 · 0 评论 -
SDWebImageManager 基于信号量来调度图片下载操作
一、创建信号量@interface SDWebImageManager ()@property (strong, nonatomic, readwrite, nonnull) SDImageCache *imageCache;@property (strong, nonatomic, readwrite, nonnull) id<SDImageLoader> imageLoader;@property (strong, nonatomic, nonnull) NSMutableSe原创 2021-05-12 10:32:31 · 149 阅读 · 0 评论 -
IOS --- 基于调度组实现异步多图片下载
一、新建一个调度组 创建 全局队列 串型队列 并发队列 dispatch_group_t group = dispatch_group_create(); dispatch_queue_t theGlobalQueue = dispatch_get_global_queue(0, 0); dispatch_queue_t theSerialQueue = dispatch_queue_create("serial.queue", DISPATCH_QUEUE_SERI原创 2021-05-12 10:09:24 · 175 阅读 · 0 评论