iOS基础
文章平均质量分 74
iOS开发的基础,每个iOS工程师都应该知道的~
莫小言mo
用心梳理加强理解,记录在案方便查阅
https://github.com/mxh-mo
展开
-
iOS_convert point or rect 坐标和布局转换+判断
from: 从哪个坐标系 to: 到哪个坐标系。原创 2024-03-27 23:00:00 · 701 阅读 · 0 评论 -
iOS_performSelector:withObject:afterDelay:
使用 performSelector 带有 afterDelay 方法时需要注意原创 2023-03-19 16:59:29 · 471 阅读 · 0 评论 -
iOS_ __attribute__
可以给类、方法、枚举等标记特性的命令字:OC的attribute和swift的available原创 2022-12-18 16:10:59 · 968 阅读 · 0 评论 -
iOS_Responder chain 响应链
iOS事件的传递链和响应链原创 2022-10-16 19:43:18 · 437 阅读 · 0 评论 -
iOS_OC API 指定可空性
可空性限定原创 2022-09-20 12:08:31 · 769 阅读 · 0 评论 -
iOS_泛型 Generics __covariant(协变) __contravariant(逆变)
泛型可以让你使用自定义的类型来编写灵活的、可重用的函数和类型,可以避免重复,以清晰、抽象的方式表达其意图。原创 2022-07-17 21:52:55 · 858 阅读 · 0 评论 -
iOS_预编译(宏)#if #ifdef #ifndef #elif #else #endif
ANSI C标准(是美国国家标准协会(ANSI)对C语言)规定可以在C源程序中加入一些“预处理命令”,原创 2022-06-14 21:46:38 · 2021 阅读 · 0 评论 -
iOS_ReactiveObjC_Observe 观察 基本类型变量
ReactiveObjC监听BOOL因为ReactiveObjC只能监听NSObject类型的数据,所以一般为了能监听BOOL值的类型,我们会用NSNumber来实现BOOL。这里介绍一种在不改变BOOL的情况下,通过封装实现ReactiveObjC监听BOOL值类型。例:一个Person对象,会在某一时刻更改它的hidden属性:@interface MOPerson : NSObject@property (nonatomic, assign) BOOL hidden;- (void)u原创 2022-05-29 17:58:01 · 445 阅读 · 0 评论 -
iOS_Objective-C编程规范
Objective-C编程规范文章目录Objective-C编程规范1、extern用:FOUNDATION_EXPORT2、更新布局2、更新subView布局3、synthesize/dynamic4、判断是否实现了指定协议的方法5、IOC:`inversion of control`控制反转1 格式1.1 【必须】代码组织1.2 【推荐】换行1.3 【推荐】函数长度2 命名2.1 【必须】类和协议名称2.2 【必须】分类2.3 【必须】文件名2.4 【推荐】缩略词和首字母缩写词2.5 【必须】宏定义原创 2021-10-21 15:40:32 · 1388 阅读 · 1 评论 -
iOS_单元测试四之OCHamcrest 使用
文章目录OCHamcrest一、Object二、Number三、String四、Logical五、Collection六、DecoratorOCHamcrestOCHamcrest是OC的断言框架,提供更友好的断言接口。OCHamcrest的断言方法都是以assertThat为前缀的。一、ObjectMOStudent *stu = [[MOStudent alloc] init];stu.name = @"momo";MOStudent *stu2 = nil;assertThat(st原创 2021-08-13 17:33:05 · 251 阅读 · 0 评论 -
iOS_单元测试三之OCMockDemo
OCMock使用举例文章目录OCMock使用举例需要测试的代码:测试步骤:1、准备数据2、添加预期可以预期不执行:可以验证参数:可以预期执行顺序:可以忽略参数(预期方法执行时):3、执行4、断言5、停止Mocking例如:需要测试的代码:@implementation MOOCMockDemo+ (void)handleLoadFinished:(NSDictionary *)info { MOPerson *person = [MOPerson personWithInfo:info]原创 2021-06-29 18:51:19 · 408 阅读 · 1 评论 -
iOS_单元测试三之OCMock使用
OCMock文档翻译~原创 2021-04-03 20:08:00 · 1349 阅读 · 0 评论 -
iOS_单元测试二之UITests
UI测试基于三个新类的实现:XCUIApplication:代表整个应用程序,可以用来启动、结束进程,或者传入一些启动参数。常用来查询UI上的元素XCUIElementQuery:代表一系列可查询的UI元素XCUIElement:代表具体的UI的元素建一个UITests类:那些setUp和tearDown方法这里就不一一赘述了,上一篇文章有介绍过。我们来看看不一样的:// 应用程序对象let app: XCUIApplication = XCUIApplication()overri原创 2021-03-28 15:52:17 · 830 阅读 · 5 评论 -
iOS_单元测试一之UnitTests
UnitTest 单元测试,简单举例原创 2021-03-21 13:33:00 · 500 阅读 · 0 评论 -
iOS_Swift_Scanner使用_字符串截取
文章目录Scanner一、初始化二、属性三、方法四、使用举例ScannerScanner继承自NSObject, 遵循NSCopying协议。是一个用于扫描指定字符串的抽象类初始化时指定需要扫描的String,可以设置需要跳过的字符集合调用scan方法,scanner会按要求扫描出需要提取的字符串一、初始化let scanner: Scanner = Scanner(string: "http://www.baidu.com?type=value&age=18")二、属性// 初始原创 2021-08-05 20:55:09 · 673 阅读 · 0 评论 -
iOS_UIFont的Attributes解析
Font attributes最近做了一个需求,在AttributeString中插入图片,然后需要图片跟文字对齐。就遇到了ascender,所以简单了解了一下,贴在这里以备以后查看~let lb = UILabel(frame: CGRect(x: 100, y: 100, width: 100, height: 100))let font = UIFont.systemFont(ofSize: 20)lb.font = font;lb.text = "afj"self.view.addSu原创 2021-07-21 20:49:34 · 1180 阅读 · 0 评论 -
iOS_preformSelector在delay 0秒时的执行顺序
preformSelector在delay 0秒时的执行顺序- (void)mainMethod { [self performSelector:@selector(delayMethod) withObject:nil afterDelay:1]; NSLog(@"调用方法==开始"); sleep(5); NSLog(@"调用方法==结束");}- (void)delayMethod { NSLog(@"执行延迟方法");}原创 2021-04-18 22:34:56 · 186 阅读 · 0 评论 -
iOS_解决:当点击到TableViewCell上的Button时,就无法滑动TableView的问题
之前面试遇到了一个问题:长按到UIButton时,UITableView滑动不了,有遇到过么?(怎么解决?)估计是当前面试官描述的不够清楚,我就说没有遇到过,幸而躲过了这一题。但其实肯定是遇到过的,只是没有引起我的重视。以下是解决办法:1、无法滑动的问题当点击到TableViewCell上的Button时,就无法滑动TableView的问题。解决的办法是:自定义一个TableView继承自UITableView,并重写以下方法:override func touchesShouldCa原创 2021-03-14 16:26:24 · 660 阅读 · 0 评论 -
iOS_Apple 指令集
Apple 指令集iOS测试分为模拟器测试和真机测试,处理器分为32位和64位。ARM架构 ARM架构,过去称作高级精简指令集机器(英语:Advanced RISC Machine,更早称作艾康精简指令集机器,Acorn RISC Machine),是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多嵌入式系统设计。由于节能的特点,其在其他领域上也有很多作为。ARM处理器非常适用于移动通信领域,符合其主要设计目标为低成本、高性能、低耗电的特性。原创 2021-02-17 23:19:58 · 962 阅读 · 1 评论 -
iOS_selector、SEL、IMP、Method都是什么,以及之间的关系
在`Objective-C`中使用发送消息的形式来调用方法,其中涉及到`Runtime`库中定义的`SEL`、`IMP`、`Method`,它们分别表示什么,以及它们之间的关系。原创 2021-02-08 21:20:35 · 2023 阅读 · 0 评论 -
iOS_Tagged Pointer是什么,结构
iOS为提高小内存对象在存储和访问的效率,使用的Tagged Pointer机制。其原理+结构+面试题原创 2021-01-17 12:20:11 · 353 阅读 · 0 评论 -
iOS_Effective Objective-C 20 编写高质量iOS与OS X代码的52个有效方法
三读Objective-C2.0 笔记~(作为一个OC开发者,必读之书)原创 2021-01-07 10:42:52 · 532 阅读 · 0 评论 -
iOS_实例、类、元类、基类之间的关系+结构体
isa指针OC中任何类的定义都是对象,任何对象都有isa指针。isa是一个Class类型的指针。实例的isa指针,指向类;类的isa指针,指向元类;元类的isa指针,指向根元类;父元类的isa指针,也指向根元类!!根元类的isa指针,指向它自己!!superClass类的superClass指向父类;父类的superClass指向根类;根类的superClass指向nil;元类的superClass指向父元类;父元类的superClass指向根元类;根元类的superClass指.原创 2021-01-05 17:50:26 · 423 阅读 · 0 评论 -
iOS_沙盒文件系统
iOS沙盒文件系统,及使用建议~原创 2021-01-03 21:08:51 · 424 阅读 · 3 评论 -
iOS_Extension、Category、load、initialize
Extension、Category、load、initialize 的概念,区别,使用建议~原创 2020-12-13 18:24:43 · 286 阅读 · 0 评论 -
iOS_模块/文件导入:#include、#import、<>、“”、@class
文件or模块 导入的几种方式:# include <XXX> / "XXX"、# import <XXX>、# import “XXX”、@class XXX 的区别原创 2020-11-23 22:10:56 · 704 阅读 · 0 评论 -
iOS_理解“对象等同性”这一概念(==、isEqual、hash)
==、isEqual、hash 的含义及使用场景,该如何覆写原创 2020-10-31 13:40:37 · 451 阅读 · 0 评论 -
iOS_指定初始化方法Designated Initializer和非指定初始化方法Secondary Initializer
指定初始化方法 和 非指定初始方法 的概念,以及应该怎么实现原创 2020-11-12 17:11:13 · 544 阅读 · 0 评论 -
iOS_多线程:函数等待异步任务执行完毕后返回(异步实现同步效果)
将异步任务实现为同步的方式:信号量、派发组、......原创 2020-11-07 16:30:06 · 2742 阅读 · 0 评论 -
iOS_理解Block(代码块)+底层实现
Block基本语法+捕获变量+类型+底层实现+循环引用+面试题原创 2020-10-26 21:49:41 · 485 阅读 · 0 评论 -
iOS_理解“属性”(property)这一概念
OC的属性类似语法糖,系统会根据不同的声明实现:实例变量+setter+getter;各个标识符的作用+面试题原创 2020-10-24 23:24:04 · 1389 阅读 · 0 评论 -
iOS_Objective-C 消息发送(消息查找 及 消息转发)过程
OC中函数的原理,消息的查找过程+消息的转发原创 2020-10-22 15:03:52 · 797 阅读 · 0 评论 -
iOS_KVC:Key-Value Coding-2(访问者搜索模式)
Accessor Search Patterns 访问者搜索模式一道面试题:当我们调用valueForKey: or setValue:forKey: 时,系统是怎么查找的?例如有这样一个person类:@interface MOPerson : NSObject// @property (nonatomic, copy) NSString *name;// 把name注释掉,假设.h文件没有保罗name or 根本没有实现这个属性@end一、Getter 搜索模式例如:当我们通过val原创 2020-08-27 11:49:25 · 274 阅读 · 0 评论 -
iOS_KVC:Key-Value Coding-1(使用)
访问对象属性例如有这样一个类:@interface MOPerson : NSObject@property (nonatomic, copy) NSString *name;@property (nonatomic, strong) NSNumber *number;@end我们可以使用setValue:forKey:修改对象的属性[person setValue:@"lili" forKey:@"name"];我们可以使用valueForKey:获取对象的属性[person val原创 2020-08-24 18:00:50 · 312 阅读 · 1 评论 -
iOS_定时器:NSTimer、GCDTimer、DisplayLink
在iOS里用个Timer(定时器)真的是太麻烦了,一不小心就不work了,一不小心又导致内存泄露了~反正就是得非常注意,下面就来聊聊计时器:Timer工作原理首先我们得了解Timer是怎么工作的:首先它需要加到RunLoop中,RunLoop会在固定时间触发Timer的回调。这个Timer是被存放在RunLoop的Model的_timers数组里,是强引用的。(之前的文章有介绍RunLoop的结构)因此我们需要在持有Timer的对象(如:ViewController,本文就以ViewControl原创 2020-07-13 18:16:04 · 2763 阅读 · 0 评论 -
iOS_自动释放池AutoreleasePool、NSRunLoop、线程Thread 之间的关系
众所周知:一个AutoreleasePool对应一个RunLoop,一个RunLoop对应一个线程。但一个RunLoop可以包含多个AutoreleasePool。本篇大致聊一聊AutoreleasePool:本质:AutoreleasePool的本质就是延迟 release 方法的调用。MRC环境,可以通过调用 autorelease 来延迟内存的释放ARC环境,甚至可以完全不知道 autorelease 也能管理好内存ARC环境下:以alloc/init/new/co..原创 2020-07-08 22:26:25 · 828 阅读 · 0 评论 -
iOS_RunLoop、Modes、Source、Timer、Observer、主要结构...
1、RunLoop是什么?RunLoop是运行循环,在程序运行过程中循环做一些事情,如果没有RunLoop程序执行完毕就会立即退出,如果有RunLoop程序会一直运行,并且时时刻刻在等待用户的输入操作。RunLoop可以再需要的时候自己跑起来运行,在没有操作的时候停下来休息。充分节省CPU资源,提要程序性能。iOS将RunLoop封装成一个对象,每条线程都有与之对应的runloop,主线程...原创 2020-03-05 11:31:51 · 462 阅读 · 0 评论 -
iOS_Runtime是什么?原理?作用?怎么实现weak?使用
Runtime:1、什么是runtime?就是在程序运行的过程中,有一套C语言级别的API,它把代码从OC转换成C2、原理:OC是基于C,并添加了面向对象的特性,将很多静态语言在编译和链接时做的事放到了runtime运行时来处理C:函数的调用在编译时就知道会调用哪个函数OC:在编译的时候并不知道,只在正在运行时才会根据函数名称找到对应的函数3、作用获取属...原创 2020-02-25 18:22:29 · 270 阅读 · 0 评论 -
iOS_WKWebView与JS交互 Demo
一、WKWebView的使用:1、初始化webView初始化:WKPreferences,WKUserContentController ->WKWebViewConfiguration->WKWebView这里添加了三个代理,代理方法会在下面实现。let preferences = WKPreferences()preferences.javaScript...原创 2020-02-18 16:53:56 · 857 阅读 · 0 评论 -
iOS_多线程四:NSThread + performSelector + 总结
一、NSThread是iOS中轻量级得多线程,一个NSThread对象对应一条线程1、一些类方法[NSThread mainThread]; // 获取主线程[NSThread currentThread]; // 获取当前线程// 阻塞当前线程,设置休眠时间,两种方式实现:[NSThread sleepForTimeInterval:3];[NSThread slee...原创 2020-01-19 20:38:28 · 545 阅读 · 0 评论