Objective C
星仔20180409
IOS开发人员
展开
-
iOS本地存储
iOS本地存储有几个不同的方式,如下所示:NSUserDefaults:存储基本数据类型数据和二进制数据,只适用于存储比较微量的数据,例如配置项,登录信息等,不适合存储大量的数据,因为程序冷加载启动时也会加载这个,如果比较大的话会明显增加app启动耗时。NSKeyedArchiver/NSKeyedUnarchiver:可将数据归档后生成二进制数据然后写入文件中,如果是自定义模型类,必须先实现NSCoding协议,才可以进行归档/反归档操作。jsonString直接写入文件:比较适用于后台更新的原创 2022-02-22 19:19:38 · 1620 阅读 · 0 评论 -
iOS开发中多线程的应用
一、前言iOS开发中可以使用的多线程方案有:pthread:纯C语言实现的跨平台多线程解决方案,使用难度大。在iOS平台不推荐使用。 NSThread:iOS平台下面向对象的线程对象,使用相对容易,但需要开发者来管理其生命周期,而且多个线程同步需要配合NSLock等锁一起使用。 Grand Central Dispatch (GCD):iOS平台下纯C的API的多线程解决方案,隐藏了很多技术细节,比如不用手动创建线程,不用管理线程生命周期,不用使用各种锁,让开发人员可以专注于业务逻辑本身。 N原创 2022-02-21 02:19:04 · 1666 阅读 · 0 评论 -
iOS开发中ARC的本质
一、产生背景ARC(Auto Reference Counting)技术是苹果公司在设计XCode Static Analysis(静态分析工具)时产生的灵感,苹果公司想既然这个工具可以检测到内存泄漏,那么应该也可以帮助开发者做好内存管理工作。于是ARC在2011年iOS5发布的时候就推出了。它在苹果文档中是这样介绍的:在Objective-C中采用ARC机制,让编译器来进行内存管理。在新一代Apple LLVM 编译器中设置ARC为有效状态,就无需再次键入retain或者release代码,这在原创 2022-02-17 14:08:24 · 1130 阅读 · 0 评论 -
基于UIScrollView实现一个可复用的TableView
一、前言UITableView的功能比较复杂和全面,因此本文只实现部分UITableView的功能。二、实现目标实现一个可重用,以及可以简单显示数据列表的功能。三、设计思路首先UITableView是由依次排列的单元格组成的(不考虑表头和表尾),那么可以先创建个自定义的cell继承自UIView,它的作用就是代替UITableViewCell作为表格视图的一个显示单元。它应该具有以下几个特点:可重用标识 可以显示数据那么由此可以仿照UITableViewCell创建一个可重用标识原创 2022-02-16 18:56:33 · 594 阅读 · 0 评论 -
iOS开发中OC对象内存管理小记
在MRC时代,遵循着“谁创建,谁释放”的原则,创建方法包括alloc, new, copy, mutableCopy以及以它们为前缀的构造方法例如allocWithXXX, copy等,原创 2021-06-17 18:29:50 · 122 阅读 · 0 评论 -
OC中创建唯一单例的保险做法
OC中创建唯一单例的保险做法// XZNotification.h@interface XZNotification : NSObject<NSCopying, NSMutableCopying>/** * @brief 创建一个通知中心单例,请不要自己通过alloc和init创建,而是调用此方法 * @return 唯一通知中心实例变量 */+ (XZNotification *)notification;@end// XZNotification.m@implement原创 2021-06-08 10:49:18 · 110 阅读 · 0 评论 -
Xcode中Build Setting的“Other C Flags”和“Preprocessor Macros”有什么区别
Preprocessor Macros:顾名思义,就是预处理的宏,例如debug ## 相当于#define debug还可以赋予任何初始值,例如debug=1Other C Flags:编译选项,如果用过g++命令的肯定看过这样的命令:g++ -D Debug HelloWorld.cpp这个命令就代表了编译链接之前先定义一个叫做Debug的宏,这样在HelloWorld.cpp文件中就可以使用#ifdef预处理命令了。在Other C Flags中也有类似的用法:上面的原创 2021-04-01 11:45:47 · 978 阅读 · 0 评论 -
开源框架提供对CocoaPods的支持
前言一般而言,大多数开源框架都是托管在GitHub上,然而光是托管上去,并不能直接使用CocoaPods提供版本支持,所以需要开发人员通过一系列操作来提供支持。正文假设已有一个开源框架在GitHub上,名称姑且称之为HelloWorldFramework,首先在将代码clone到本地:git clone git@github.com:fangzhenxing/HellloWorldFramework.git然后在GitHub上创建一个release版本:然后在工程主目录下.原创 2020-05-27 10:53:25 · 151 阅读 · 0 评论 -
objective-c中的copy关键字
前段时间突然被问到copy关键字的作用以及产生的效果,现在就来讨论讨论。首先阐述两个概念:深复制:就是说复制时除了指针本身,对象内容也被复制了一份浅复制:就是说只是复制了指针本身,对象内容并没有被复制一.集合对象的复制以数组类型为例,假设现在有一个数组:NSArray *array =[NSArray arrayWithObjects:[Person new]...原创 2020-04-21 17:51:19 · 197 阅读 · 0 评论 -
浅析IOS中isa指针的作用
在objective-c语言中,isa指针看名称指的是“是一个”的意思。isa指针是一个指针,具体到代码中,如果是对象,对象中的isa指针是指向的它的类对象。/// An opaque type that represents an Objective-C class.typedef struct objc_class *Class;/// Represents an instance...原创 2019-11-27 00:42:29 · 1091 阅读 · 0 评论 -
XCode11辅助功能小记
Xcode11之前在辅助窗口打开文件一般是使用快捷键command+鼠标左键就可以了。然而在Xcode11之后这个快捷键已经无效了,取而代之的是command+shift+鼠标左键。这里记录一个小坑点:这个小加号图标的按钮如果是这样置灰了的话,上面的快捷键是无效的。一开始我以为是Xcode11的bug,后面才发现是这个focus-on功能的原因。点击一下这个按钮,退出focus-on功能,...原创 2019-10-12 10:17:05 · 568 阅读 · 0 评论 -
关于OC重写ViewController init方法中使用[self.view addSubview:XXX];引发的 self.navigationController为nil问题
由于swift中属性初始化可以在定义的时候就写初始化代码,而OC中初始化自定义属性的代码需要写进init方法里面: _customBar = [[UINavigationBar alloc]initWithFrame: CGRectMake(0, 0, [UIScreen cz_screenWidth], 64)]; _customItem = [[UINavigat...原创 2018-04-21 16:01:25 · 3284 阅读 · 0 评论