自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(228)
  • 资源 (3)
  • 收藏
  • 关注

原创 苹果公司为什么要设计元类

实例方法调用是通过objc_msgSend来调用,它的第一个入参就是实例对象,其流程是查找实例对象的isa指针,找到类对象,然后找到method_t的IMP,bl直接跳转调用。类方法的调用和实例方法调用一致,它的第一个入参对象是类对象,类对象的isa指向的是元类。所以,没有元类的话,类方法是没有办法调用的。如果没有找到相应的方法实现,元类在此过程中发挥作用,它保存了类方法(class method)的信息,同时也参与动态方法解析过程,即当对象方法不存在时,会尝试在继承链中查找并可能动态添加方法。

2024-04-05 21:36:56 202

原创 函数式编程- OC实现方式

- (UIButton *(^)(NSString * T)) XX_text { return ^id(NSString * T){ [self setTitle:T forState:0]; return self; };}

2023-12-22 15:15:14 353

原创 layoutIfNeeded 和 sizeToFit 的优缺点

layoutIfNeeded和sizeToFit是UIKit中用于更新视图布局的方法,它们的优缺点如下:

2023-12-01 11:21:07 194

原创 SJVideoPlayer控制器实现短视频列表心路历程

前言:从遇到的问题着手,阐述解决方案。问题一:如何实现列表横屏?该页面VC需要支持横屏- (BOOL)prefersHomeIndicatorAutoHidden { return YES;}- (BOOL)shouldAutorotate { return YES;}- (UIInterfaceOrientationMask)supportedInterfaceOrientations { return UIInterfaceOrientatio

2022-05-24 16:43:47 1090

原创 学习笔记之网络架构

一、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 384

原创 学习笔记之ReactiveCocoa(一)

一、RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据。 信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出。 默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发。 如何订阅信号:调用信号RACSignal的subscribeNext就能订阅。 RACSiganl简单使用:

2022-02-04 15:32:12 150

原创 学习笔记之编程思想

编程思想:面向过程:处理事情以过程为核心,一步一步的实现。给第一次软件危机埋下了伏笔。面向对象:万物皆对象(没有对象New一个)。链式编程思想:将多个操作(所行代码)通过点号(.)链接在一起成为一句代码,目的是可读性好。链式编程最大的特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)。示例代码:CalculateManager#import <Foundation/Foundation.h>NS_ASSUME_NONN

2022-02-02 22:06:09 864

原创 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 3847

原创 学习笔记之一些原则

一致性(Consistency)对某个给定的客户端,读操作要保证能够返回最新的写操作。限定了客户端视角,满足很多业务场景,要满足读取的数据是最新写操作后的数据。因为在事务执行的过程中客户端是无法读取到未提交的的数据,只有事务提交后,客户端才能读取到事物写入的数据。2. 可用性(Availability)非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)如果一个节点本来就有故障,还怎么返回合理的响应。例如超时那就不是一个合理的时间,合理的反应,不能超时,不能出错,返回的code

2022-01-26 18:23:55 944

原创 学习笔记——高性能架构模式

读写分离,就是将访问数据的压力分散到不同节点上,会增加存储资源。一般是两台服务起,一台是主服务器主要是负责写数据,另外几台是作为读数据,主服务器需要将数据同步到从服务器中。同步数据会带来两个复杂度:复制延迟和分配机制。复制延迟就是说数据同步有延迟的情况,对于一些特殊场景是无法接受的。处理方案有:写操作后读操作在指定数据库主服务器;多读几次从服务器;关键业务读写都在主服务器,非关键业务采取读写分离。总的来讲就是特殊业务场景直接访问关键数据,一般场景就读写分离。分配机制有程序代码封装和中间件封装

2022-01-25 17:29:21 682

原创 学习笔记--架构基础知识

组件和模块的理解从逻辑角度拆分系统得到的单元是模块,从物理的角度拆分系统得到单元是组件。划分模块的目的是指责分离,划分组件的目的是单元复用。框架和架构的理解框架就是提供组件规范以及基础功能的产品。架构指的是软件系统的基础架构,创造这些基础架构的准则以及这些架构的描述。现在大厂招架构师,就很侧重候选人对业务熟练以及架构设计能力,很接地气儿。总结:软件架构指的是系统顶层结构,系统是一群关联个体组成,这些个体可以是子系统 模块 组件,架构需要明确系统包含哪些个体,系统中个体根据具某种规则运作,架构

2022-01-23 12:15:51 1909

原创 技术随笔-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 288

原创 基于MQTT提高客户端和服务器之间推送可靠性

一、MQTT简介MQTT翻译过来叫消息队列遥测传输是基于发布和订阅范式的消息协议,它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下二设计的发布/订阅型消息协议。MQTT协议是为大量计算能力有限,且工作在低带宽,不可靠网络的远程传感器和控制设备通讯而设计的协议具有以下特性:1、使用发布/订阅消息模式,提供一对多的消息发布,接触应用程序耦合2、对负载内容屏蔽的消息传输3、使用TCP/IP提供网络链接4、有三种消息发布的服务质量5、小型传输,开销很小(固

2022-01-02 16:16:46 3675

原创 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 3834

原创 ibeacon 在车机App蓝牙保活的运用

apple iBeaconiBeacon相关知识 - 简书

2022-01-01 12:58:14 1445

原创 学习Git

2021-07-11 10:24:38 83

原创 RAC初学

//// ViewController.m// LearnRAC-01//// Created by maochengfang on 2021/7/3.//#import "ViewController.h"#import "ReactiveObjC.h"@interface ViewController ()@property (nonatomic, strong) RACDisposable *subscriber;@end@implementation ViewCon.

2021-07-03 10:55:26 113

原创 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 319

原创 组件化开发之创建远程私有库

查看本地代码仓库命令pod repo在码云上新建远程仓库注意需要将本地公钥传到码云设置上本地生成共钥命令ssh-keygenid_rsa 是私钥, id_rsa.pub是公钥。把公钥的内容填入码云仓库中就可以了然后增加远程私有库pod repo add DataStoreTool [email protected]:maochengfang/DataStoreTool.git就可以万事大吉了在本地创建一个私有库名字和远程仓库同名git lib cr

2021-06-29 23:32:02 1000 2

原创 组件化开发之本地私有库建立

需要引入本地私有库DataStoreTool新建一个主工程后在主工程目录下建立一个私有库models,里面存放一个私有库DataStoreTool在DataStoreTool目录下存放一个目录Classes,因为后面的建立spec文件目录中存在这样的文件夹字眼,git init 初始化gitgit add . 添加到暂缓区git commit -m 'first commit'建立spec描述文件git spec create DataStoreTool打开...

2021-06-29 00:09:33 278 1

原创 组件化开发之git使用

初始化本地代码仓库添加到暂缓区本地仓库状态查询 绿色就是添加到暂缓区的文件本地仓库提交日志提交到原创仓库 这里有个变化 之前是master 现在变成main 理由就是规避种族歧视风险打本地标签提交到远程仓库标签提交到指定的tag查看原创仓库提交的tag本地删除标签远程删除 标签...

2021-06-27 21:53:23 164

原创 MPaas组件化开发之代码同步

场景一:同步远程仓库代码并且查看git status 查看本地仓库状态git reset -hard 当前版本回退git pull 本地与仓库同步代码场景二:查看podfile 中mpaas要切换的版本输入命令pod mpaas update versionStr然后输入命令 pod install...

2021-06-26 16:43:04 172

原创 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 2849

原创 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 1511

原创 基于字符序列组装字典

+ (NSDictionary *)func:(NSString *)firstArg, ... { firstArg = [firstArg stringByReplacingOccurrencesOfString:@" " withString:@""]; NSArray *keys = [firstArg componentsSeparatedByString:@","]; NSMutableDictionary *dic = [NSMutableDictionary dic.

2021-06-24 19:13:04 118

原创 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 352

原创 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 190

原创 使用__has_include来检查项目是否引入某个类

+ (NSString *)getAccountId{#if __has_include(<ZLUserCenter/ZLUserCenter.h>) return userInfo.accountId;#else return nil;#endif}

2021-06-24 14:38:06 503

原创 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 185

原创 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 93

原创 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

原创 一个页面的分块代码编辑区域

#pragma mark - UI#pragma mark - 代理协议#pragma mark - 事件响应#pragma mark - 其他私有方法#pragma mark - setter & getter#pragma mark - 内存管理

2021-06-22 15:27:25 143

转载 ReactiveCocoa 中 RACCommand 底层实现分析

转载

2021-06-21 16:44:06 99

原创 学习RACCommand

一、理论RACCommand 是ReactiveCocoa中比较复杂的类,可以用来创建个订阅响应某些事件的信号,在作用于与UIKit组件进行交互或者执行包含副作用的操作时,它能够帮助我们更快的处理并且响应任务,减少编码以及工程复杂度(????),实现流程如下:二、实践ViewModel 文件里对外暴露RACCommand 属性,在init函数中初始化Raccommands- (void)initRaccommands { @weakify(self); self

2021-06-21 16:10:42 126

原创 题目:找出两个 UIView 的最近的公共 View,如果不存在,则输出 nil 。

- (NSArray *)superCalsses:(UIView *)class{ if (!class) { return @[]; } NSMutableArray * result = [NSMutableArray array]; while (class) { [result addObject:class]; class = [class superview]; } .

2021-06-17 14:58:08 464

原创 OC 基础知识梳理

一、ViewController的生命周期二、OC的关键字三、计算机网络层级四、两个子视图找到同一个VC五、判断block的类型liu

2021-06-15 22:10:12 471 2

原创 Https笔记

一、非对称加密特点001 任何经过A公钥进行加密的信息,只有A的私钥进行解密002 任何有公钥的人可以确认对方发送的信息是否被私钥加密二、https流程图

2021-06-14 09:35:33 99

原创 研读CTMediator源码

一、源码研读CTMediator由两部分组成,远程调用和本地调用。// 远程App调用入口- (id _Nullable)performActionWithUrl:(NSURL * _Nullable)url completion:(void(^_Nullable)(NSDictionary * _Nullable info))completion;

2021-06-11 09:43:13 150

原创 计算机进程和线程

一、进程从系统层面看就是系统调用资源的最小单位,换句话就是手机上跑的App就是一个进程。如果频繁切换不同App 会让用户感觉到他们都是在同时运行的,其实不是这样,ben d zh

2021-06-10 23:27:36 328 5

转载 2021WWDC--object capture

https://developer.apple.com/videos/play/wwdc2021/10076/

2021-06-10 09:58:48 279

CommonWebView的副本.zip

OC与H5自定义交互H5控件

2021-04-29

RunLoop-线程保活.zip

保持线程活demo 利用runloop 机制休眠机制来 来保持线程活跃 并且开发者可以自己控制线程dealloc

2020-03-04

如何学习算法 五毒神掌 让算法改变自己的人生

LeetCode刷题 如何学习算法 五毒神掌 让算法改变自己的人生

2020-02-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除