
iOS
关于工作及学习中遇到的一些问题的解决方案
优惠券已抵扣
余额抵扣
还需支付
¥49.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
北方人深漂
公众号:编程微享
知乎主页:http://www.zhihu.com/people/qi-fu-18-79
展开
-
block的内存管理
MRC环境下:使用__block会使得底层将变量或者下面的person对象先包装成一个对象。源码typedef void(^GHBlock)(void);__block GHPerson *person = [[GHPerson alloc]init]; GHBlock block = ^{ NSLog(@"%p",person); };原创 2021-01-19 11:33:52 · 246 阅读 · 0 评论 -
block修改外部变量方式及底层原理
方式一:使用static修饰外部变量**NSGlobalBlock**修改了变量类型,静态变量会一直呆在内存中 typedef void(^GHBlock)(void); static int age = 10; GHBlock block = ^{ age = 100; NSLog(@"age is %d",age); }; block(); NS原创 2021-01-18 15:09:03 · 345 阅读 · 0 评论 -
block的几种类型(__NSGlobalBlock__,__NSStackBlock__,__NSMallocBlock__)
void(^block)(void) = ^{ NSLog(@"Hello"); }; NSLog(@"%@",[block class]); //__NSGlobalBlock__ NSLog(@"%@",[[block class] superclass]); //NSBlock NSLog(@"%@",[[[block class] superclass] superclass]);//NSObject原创 2021-01-15 10:23:16 · 396 阅读 · 1 评论 -
block变量捕获《一》
代码如下,我们先看一个问题,这种情况下,变量会不会被block捕获。#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface GHPerson : NSObject@property (nonatomic,copy) NSString *name;- (void)test;- (instancetype)initWithName:(NSString *)name;@endNS_ASSUME_原创 2021-01-14 17:46:39 · 133 阅读 · 0 评论 -
苹果企业级开发者账号使用规范(同样适用于个人及公司级开发者账号)
在我的iOS开发生涯中,曾做过这样几件事情:分别申请成功过:苹果个人开发者账号;苹果公司级开发者账号;苹果企业级开发者账号;苹果商务管理分发账号(ABM,苹果后期将主推的一款账号,旨在替代企业级开发者账号);其中经历申诉账号的是苹果企业级开发者账号,做iOS开发的都应该明白,苹果企业级开发者账号意味着什么吧,而且这两年申请已经越发困难了,我去年申请的到现在还在审核中,由此可见,其申请难度是真的大。我于去年遭遇公司的企业级开发者账号被锁定,14天申诉,这个在我以往的文章中有表述过,请查看:《细原创 2020-11-21 16:07:47 · 2682 阅读 · 5 评论 -
使用队列组解决任务执行顺序
需求:其他任务需要在任务1和任务2执行完成之后再进行执行。//创建队列组 dispatch_group_t group = dispatch_group_create(); //创建并发队列 dispatch_queue_t queue = dispatch_queue_create("my_queue", DISPATCH_QUEUE_CONCURRENT); //先执行任务一和任务2,然后执行完1和2后通知执行任务3(可以在主线程执行任务3)原创 2020-10-29 16:07:45 · 460 阅读 · 0 评论 -
我们一起看一个多线程面试题一
以上图中所示题目,要想打印 2 的话,则可以通过以下几种方法实现:方式一:添加运行循环:dispatch_queue_t queue = dispatch_get_global_queue(0, 0); dispatch_async(queue, ^{ NSLog(@"1"); //下述代码本质是往runloop中添加定时器,因为是在block中执行,异步新建子线程默认不开启runloop,所以此处下面代码不会执行 .原创 2020-10-29 14:39:43 · 126 阅读 · 0 评论 -
线程保活进化版
A->B ,界面从A到B在B中开启一个子线程://创建线程2 self.stopped = NO; __weak typeof(self) wself = self; self.thread = [[GHThread alloc]initWithBlock:^{ NSLog(@"%s--begin--%@",__func__,[NSThread currentThread]); [[NSRunLoop cu原创 2020-10-27 16:25:10 · 116 阅读 · 0 评论 -
线程保活《二》
如若一个子线程开启是在一个view或者vc中,那么当vc或者view销毁后,那么其线程应该也随着销毁。A->B ,界面从A到B在B中开启一个子线程://创建线程 self.thread = [[GHThread alloc]initWithBlock:^{ NSLog(@"%s--begin--%@",__func__,[NSThread currentThread]); [[NSRunLoop currentRunL原创 2020-10-27 12:51:59 · 150 阅读 · 0 评论 -
这样做线程的保活
有时在工作中会遇到这种情况,我们开启了一个子线程,不希望它销毁,希望它可以一直存在,常驻后台或前台,但又不希望它一直工作,只有需要它的时候唤醒它,不需要它的时候让它休眠,这样当有问题要处理的时候,我们可以直接拿过来使用,不需要再重新开启新的子线程。这里我们使用runloop来解决这个问题:我们先创建一个类来监测线程是否被销毁:.h#import <Foundation/Foundation.h>@interface MJThread : NSThread@end.m#imp原创 2020-10-27 09:17:28 · 287 阅读 · 0 评论 -
runloop处理scrollview滚动时定时器失效的问题及runloop与timer的关系
static int count = 0;NSTimer *timer = [NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) { NSLog(@"%d",++count); }]; [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];由于NSTi.原创 2020-10-26 16:36:26 · 380 阅读 · 0 评论 -
runloop再探
runloop运行逻辑runloop休眠的实现原理:用户操作的是应用层面api,然后反馈到底层的是内核层面的api。有消息就唤醒发消息唤醒内核,处理用户操作反馈的消息,没有消息内核会让线程自动休眠。...原创 2020-10-26 16:26:20 · 93 阅读 · 0 评论 -
Runloop初探笔记
OC版runloop是C版CFRunLoopRef的封装:- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. NSLog(@"%p----%p", [NSRunLoop currentRunLoop],[NSRunLoop mainRunLoop]); NSLog(@"%原创 2020-10-26 16:10:42 · 139 阅读 · 0 评论 -
我们一起看下如何做iOS性能优化
性能优化的几个方面:CPU优化:GPU优化:耗电优化:启动优化:主要是针对冷启动的优化添加环境变量,打印启动时间:DYLD_PRINT_STATISTICS设置环境变量的值为1详细启动时间:DYLD_PRINT_STATISTICS_DETAILS安装包瘦身:LinkMapGitHub仓库。...原创 2020-10-23 16:24:26 · 205 阅读 · 0 评论 -
iOS 屏幕成像原理及页面卡顿原因
原创 2020-10-22 17:08:55 · 529 阅读 · 0 评论 -
你应该知道如何判断一个指针是否是Tagged Pointer !
原创 2020-10-20 09:35:57 · 305 阅读 · 0 评论 -
GCD定时器接口封装
个人最近学习回顾了定时器相关内容知识点,这里做一下笔记:注:接口内容包含了 创建定时器及执行定时器任务; 取消定时器任务; 关键代码加锁:定时器唯一标识操作加锁.h文件#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface GHTimer : NSObject+(NSString *)execTask:(void(^)(void))task...原创 2020-10-14 09:36:12 · 149 阅读 · 0 评论 -
如何做GCD定时器
GCD定时器和NSTimer相比有哪些优势呢?NSTimer底层是Runloop,如果Runloop处理的任务过多,过于繁重,会导致不准时。而GCD则不同,其依赖于系统内核,不受Runloop影响,所以相对来说更准时。//创建队列// dispatch_queue_t queue = dispatch_get_main_queue(); dispatch_queue_t queue = dispatch_queue_create("timer", DISPATCH_QUEUE_SERI原创 2020-10-13 10:51:55 · 217 阅读 · 0 评论 -
NSTimer和CADisplayLink循环引用处理
方案一:引用中间件,NSProxy创建一个继承自NSProxy代理对象的子类:GHProxy.h#import <Foundation/Foundation.h>NS_ASSUME_NONNULL_BEGIN@interface GHProxy : NSObject+ (instancetype)proxyWithTarget:(id)target;@property (weak, nonatomic) id target;@endNS_ASSUME_NONNULL原创 2020-10-13 10:01:25 · 120 阅读 · 0 评论 -
runtime - isa 位域
01 — 源码解读以前学习半路出家,只知道runtime是运行时,具体怎么用?底层原理是什么样子?为什么这样写?等都一无所知,当前趁着深挖底层,学习底层的机会,加深一下对runtime底层的理解,以便应对复杂多变的互联网环境。# if __arm64__# define ISA_MASK 0x0000000ffffffff8ULL# define ISA_MAGIC_MASK 0x000003f000000001ULL# define ISA_MAGIC_VALUE 0原创 2020-08-25 13:48:14 · 186 阅读 · 0 评论 -
Blcok相关经典面试题
题目:事例分析Block在ARC和MRC情况下的使用。typedef void(^eBlock)(void);/* 栈:函数体中定义的自动变量 系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活 由编译器自动分配释放 堆:用malloc,calloc,realloc等分配内存的函数分配得到的就是在堆上 是函数库提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。一...原创 2020-03-11 10:41:45 · 189 阅读 · 2 评论 -
细数挽救企业级开发者账号的日夜
“编者荐语: 路是一步步走出来的,路在脚下。 荆棘遍地在前,然后才是鲜花铺满地。”01—事件的前期演化事情的开始要从今年七月初凌晨两点多收到苹果官方审核团队发来的一封邮件说起:邮件内容简要:您的账号创建证书签名违规应用程序,现给14天的时间 找出问题并回复我们,否则将面临封号处罚。。。。。这可以称为暴风雨来临...原创 2020-03-09 14:08:42 · 520 阅读 · 0 评论 -
2020最新苹果企业级开发者账号续费流程
“化繁为简,走上征途。”图来源:(百度)苹果企业级开发者账号:Apple Developer Enterprise Program费用:299$续费频次:1次/年使用范围:仅企业内部使用苹果企业级开发账号对于很多公司属于紧缺资源了,相比于需要通过苹果个人或者公司级开发者账号发布到App Store的app而言,它的优势太明显了,因为它可以...原创 2020-08-02 09:04:55 · 16477 阅读 · 9 评论 -
解决webview加载html或者txt高度计算及添加底部native按钮
效果图展示:https://vc.bilibili.com/mobile/detail?vc=2652765&bilifrom=1&share_source=copy_link&share_medium=iphone&bbid=ZA402AA19B6D79004FC4ADA70F0E8FF870F1&ts=1574162569...原创 2019-11-19 19:25:11 · 264 阅读 · 0 评论 -
cell中嵌套文本输入框
最近想买有这样一个需求:要求已在上图说明:第一想法是使用UITextView,首先使用它肯定可以的,只是它是嵌套在uitableview中,这样刷新的时候不免会使得几面抖动,或者自动换行异常等问题。这些都会造成用户使用起来不方便。所以本人研究了一下,最终完美的解决了这个问题。奉上demo如下:https://b23.tv/av76235885...原创 2019-11-19 18:02:17 · 756 阅读 · 0 评论 -
translatesAutoresizingMaskIntoConstraints
translatesAutoresizingMaskIntoConstraints属性和autolayout有关,如果你定义的view想用autolayout,就将translatesAutoresizingMaskIntoConstraints设为NO,如果你使用的不是autolayout,就将translatesAutoresizingMaskIntoConstraints设为YES...原创 2018-12-29 15:25:03 · 2094 阅读 · 0 评论 -
CAKeyframeAnimation
一个简单的关键帧动画创建一个继承自UIButton的子类:#import <UIKit/UIKit.h>NS_ASSUME_NONNULL_BEGIN@interface CustomAnimationBtn : UIButton//执行动画- (void)playKeyAnimation;@endNS_ASSUME_NONNULL_E...原创 2018-12-29 17:22:57 · 524 阅读 · 0 评论 -
Webview加载完底部黑线解决方案
同时设置:1.opaque = no; 2.backgroundcolor = [uicolor clearcolor]原创 2019-02-12 17:13:07 · 1501 阅读 · 2 评论 -
ARM指令集的学习
1、ARMARM处理器,特点是体积小、低功耗、低成本、高性能,所以几乎所有手机处理器都基于ARM,在嵌入式系统中应用广泛。2、ARM处理器指令集armv6|armv7|armv7s|arm64都是ARM处理器的指令集,这些指令集都是向下兼容的,例如armv7指令集兼容armv6,只是使用armv6的时候无法发挥出其性能,无法使用armv7的新特性,从而会导致程序执行效率没那么高。还...原创 2019-10-05 10:59:56 · 292 阅读 · 0 评论 -
面试准备(面试题持续更新中)
第一种题目:设计模式(常见模式已标注)总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器...原创 2019-10-07 20:33:40 · 136 阅读 · 0 评论 -
Swift-OC 互动,混编,桥接
小结:本文旨在潜在说一下swift与oc之间的桥接及相互调用 第一步: 根据个人喜好先创建一个Swift或者OC工程项目(此文以Swift项目示例),在创建好项目之后,创建一个OC类(可以创建继承自UIView或者NSObject或UIViewController),如下图我创建的那样:1.继承自NSObject且带一个属性 2.继承自UIView且带一个属性 3.继承自UIV...原创 2018-05-04 17:25:55 · 714 阅读 · 0 评论 -
浅析编程不同输入法状态下的些微区别
不知道大家再开发过程中有没有遇到过这样的困惑:在编写程序或者网页时,用英文状态(EN)还是用中文状态(CN)下的 输入法?用全角还是用半角?①.概括地说,在输入英文时,不管用什么输入法,只要是ASCII 代码(AmericanStandard Code for Information Interchange,美国信息互换标准代码)形式,都可以,使用哪种都没问题。②.问题在于,当使原创 2016-02-19 10:19:25 · 1213 阅读 · 0 评论 -
取消tableView的headerView的粘滞效果,使其与tableview一起滚动
//使得tableview每一组的headerview一起滚动- (void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat sectionHeaderHeight = 40; if (scrollView.contentOffset.y<=sectionHeaderHeight&&scro...原创 2018-12-29 10:30:21 · 456 阅读 · 0 评论 -
Xcode 10 error: Multiple commands produce...
Xcode 10 新clone React-Native 项目或者 clone类似Masonry example 时报错解决方案:原创 2018-12-29 09:36:27 · 632 阅读 · 0 评论 -
iOS 设备的CPU架构(持续更新)
armv6: iPhone、iPhone 2、iPhone 3G、iPod Touch(第一代)、iPod Touch(第二代) armv7: iPhone 3Gs、iPhone 4、iPhone 4s、iPad、iPad 2 armv7s: iPhone 5、iPhone 5c (静态库只要支持了armv7,就可以在armv7s的架构上运行) arm64(注:无armv64): iPhone原创 2016-12-21 15:04:15 · 3510 阅读 · 0 评论 -
"ASIHTTPRequest"使用报错:ARC forbids explicit...及#import <libxml/HTMLparser.h> file not found
"ASIHTTPRequest"三方库 <libxml/HTMLparser.h>原创 2016-10-20 18:00:18 · 663 阅读 · 0 评论 -
iOS UITableViewCell的混乱显示与重用问题
什么是cell的重用机制?当一个cell从被创建到被使用,使用结束便被放到缓存池中等待复用,但是cell中所展示的内容却仍然存在未被销毁,故当要展示新的内容时,还会展示之前cell中的内容.这就是重用机制.解决方案:方法1.在cell被从缓存池中取出来重用之前,会先调用这个方法:- (void)prepareForReuse;官方解释:if the cell is reusab原创 2016-06-22 17:38:20 · 755 阅读 · 0 评论 -
证书相关后缀文件(SSL,X.509,PEM,DER,CRT,CSR,CER,KEY,P12)及RSA数据加密解密
首先,要说一句还在为标题中的东西迷茫的帅哥美女工程师们,你们的福利来啦!其次,我要感谢提供这些信息的两位资深工程师大神.最后让我们一起揭晓这神秘的面纱吧: 证书相关后缀文件(SSL,X.509,PEM,DER,CRT,CSR,CER,KEY,P12):链接: 那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)RS转载 2016-06-02 14:31:33 · 7309 阅读 · 0 评论 -
静态库小纪
静态库小纪制作.a文件为什么要做静态库 国内的企业掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用”闭源”的方式开发使用,例如:百度地图,友盟,JPush等. 在企业开发中,一些核心技术或者常用框架,处于安全性和稳定性的考虑,也会提供静态库给程序员使用.如何制作静态库创建静态库小项目Xcode展示静态库创建实现自己需要封装的方法自己需要封装的方法添加要导出的头文件 ##Xcod原创 2016-05-29 16:19:43 · 535 阅读 · 0 评论 -
欢迎使用优快云-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl原创 2016-05-29 14:56:03 · 251 阅读 · 0 评论