
iOS
那夜的星空分外清澈
学如逆水行舟,不进则退。
展开
-
SystemConfiguration 简介
SystemConfiguration 框架简介在电脑开启时,configd 守护线程便会开启,进行网络配置,而 SystemConfiguration.framework 则是与该线程进行会话,从而管理网络配置的。该框架主要有两个目的,一是提供动态的网络配置,使得用户可以对网络无缝连接,另一个是支持应用对网络的创建、修改以及网络服务的访问。对于简单的网络连接状态变化,该框架中直接提供了一些方法,可以监听相关的状态值,从而避免开发人员去涉及较低层的方法,如常用的 AFNetworking 第三方库就使原创 2020-05-31 20:25:11 · 8576 阅读 · 0 评论 -
Objective-C 类与实例调用 self 方法的区分
Objective-C 类与实例调用 self 方法的区分声明一个 Person 类,考虑如下代码:id aa = [Person self];id bb = [self self];Person *cc = self;id dd = [cc self];我们知道在 <NSObject> 协议中声明有实例方法:- (instancetype)self;,但是并没有 sel...原创 2020-05-01 00:06:09 · 412 阅读 · 0 评论 -
NSNotificationCenter 和 NSNotificationQueue 使用
NSNotificationCenter 和 NSNotificationQueue通知中心和通知队列,需要明确的是队列只是缓存通知,并不实际推送通知,但是根据 NSPostingStyle 和 NSNotificationCoalescing 的选择,通知队列可以决定向通知中心传递通知的时机以及是否合并相关的通知。默认通知队列NSNotificationQueue 提供了一个类属性 def...原创 2020-04-25 23:24:26 · 902 阅读 · 0 评论 -
UIVisualEffectView
UIVisualEffectViewUIVisualEffectView 视图,为其遮盖的视图提供额外的效果,或影响其内部子视图的效果。区分两者主要是 UIVisualEffect 的两个子类 UIBlurEffect 和 UIVibrancyEffect,初始化 UIVisualEffectView 实例对象时需要从两个子类中选择一个,作为视图效果。但是,通常使用 UIVibrancyEf...原创 2020-04-20 23:35:11 · 2157 阅读 · 0 评论 -
UIScreenMode
UIScreenModeUIScreenMode 是个很简单的类,用来描述屏幕的信息,其只有以下两个属性,并且都是只读的。size,表示屏幕的宽高,单位是像素。同样也表示了底层显示缓冲区的大小。pixelAspectRatio,像素的横纵比,是像素的宽度与高度的比值,在 iPhone 和 iPad 上一般都是 1 。鉴于这两个属性都是只读的,所以应当从 UIScreen 获取相应的 U...原创 2020-04-13 11:04:34 · 516 阅读 · 0 评论 -
Apple 设备尺寸
Apple 设备尺寸iPhone 设备设备名(推出年份)对角线尺寸(英寸)分辨率(像素)PPIAsset点状态栏高度(点)虚拟Home键高度(点)iPhone 11 Pro(2019)5.82436*1125458@3x812*3754434iPhone 11 Pro Max(2019)6.52688*1242458@3x896*4...原创 2020-04-08 22:55:17 · 797 阅读 · 0 评论 -
UIWindow
UIWindowUIWindow 虽然是 UIView 的子类,但却是所有 UIView 视图的容器。想要为其添加视图,可以直接使用父类中的 addSubview 方法,也可以为其 rootViewController 属性赋值,如此控制器的视图会自动添加到该窗口中,前提是控制器的视图没有父视图。应当注意的是,下面两个方法并没有进行什么操作,也不能将窗口设置为主窗口或取消主窗口。- (voi...原创 2020-03-30 23:35:02 · 149 阅读 · 0 评论 -
随笔
随笔如果向一个 NSMutableArray 中添加一个弱引用类型的对象,会有什么情况?如果该弱引用是用 weak 修饰的,那么,如果在添加时,其所指向的对象已经没有其他强引用指向它,那么,程序会崩溃,因为变量已经被置为 nil ,如下,同样使用 __weak 修饰,添加 NSString 和 NSMutableString 类型到数组中时,前者成功,而后者失败。self.list ...原创 2020-03-29 16:18:51 · 258 阅读 · 0 评论 -
Core Foundation 内存管理简介
Core Foundation 内存管理简记对象引用的强弱在 Core Foundation 中,函数的名称中含有 create 或 copy 的,那么变量对返回对象为强引用,如果是含有 get 的函数返回的对象,则对其为弱引用。如此,需要根据具体情况,使用 CFRetain 和 CFRelease 对变量进行持有或释放,从而修改对象的引用计数。除此之外,还可以通过 CFGetRetainC...原创 2020-03-26 22:04:06 · 694 阅读 · 0 评论 -
NSTimer
NSTimer定时器类中的方法十分简单,需要注意的只有下面几点:创建后,需要添加到运行循环中,才会生效。对于反复执行的定时器,注意循环引用的问题。传递的触发时间间隔应为正数,否则默认为 0.1 毫秒。定时器并不是精确的,除了系统保留的误差时间外,还可以通过 tolerance 属性设置自己的误差值,一般是时间间隔的 10% 。定时器会在触发时间和触发时间加误差值之间触发,在此之前,不...原创 2020-03-15 14:26:29 · 196 阅读 · 0 评论 -
UIDevice
UIDeviceUIDevice 类的单例描述了当前设备的一些设备信息,如设备名称、设备类型、系统名及版本号、电池状态、进近传感器状态、设备姿态等信息。可以通过注册如下通知,来获取相关变化。UIDeviceOrientationDidChangeNotificationUIDeviceBatteryStateDidChangeNotificationUIDeviceBatteryLev...原创 2020-03-03 22:21:16 · 1015 阅读 · 0 评论 -
iOS AES 加密
iOS AES 加密下面的方法可以指定操作方式对文本进行加密或解密,还可以指定密钥的长度。这里 AES 加解密指定的是 ECB 模式,kCCOptionPKCS7Padding 填充方式。当然,实际上 iOS 只支持 kCCOptionPKCS7Padding 一种填充方式,或者不填充,并且 CCCrypt(...) 函数默认的是 CBC 模式。+ (NSData *)crypt:(NSDa...原创 2020-02-28 18:34:15 · 454 阅读 · 0 评论 -
NSRunLoop
NSRunLoop可以使用 NSRunLoop 类中的方法开启一个线程的运行循环,其主要的开启方法有下面 3 种,但实际上前两种方法都是通过反复调用第三种方法实现的。只是第一个没有过期时间限制,而第二个有时间限制,但两种开启方法默认的循环模式都是 NSDefaultRunLoopMode 。- (void)run; - (void)runUntilDate:(NSDate *)limitDa...原创 2020-02-25 23:46:44 · 243 阅读 · 0 评论 -
iOS 13 Scene Delegate and multiple windows
iOS 13 Scene Delegate and multiple windowsiOS 13的一大改进就是支持multiple windows(多窗口)功能,虽然多窗口仅在iPadOS上获得支持,但这已经是一个很大到的进步,它将会大大提升一些场景的使用体验。本文将结合WWDC 2019相关topic介绍与多窗口相关的内容。Scene Delegate为了实现多窗口功能,苹果修改了使用...转载 2020-02-24 22:32:55 · 2349 阅读 · 0 评论 -
线程
线程在一个进程中,一个线程有生有死,若要线程不死不灭,那么需要一个死循环,但是如果由线程不断的轮询任务是否存在,则太耗费性能,所以引入 运行循环 来为线程监听事件。如果没有监听到事件时,就使线程休眠。发出事件的称为事件源,事件源可以分为输入源和定时源。脱离/独立线程 和 可连接/非独立线程一般而言,应用程序的主线程都是以非独立的方式创建的,而其他可选的工作都是创建独立线程进行处理。当程序被...原创 2020-01-31 20:55:32 · 147 阅读 · 0 评论 -
iOS 应用启动优化简述
iOS 应用启动优化简述简单来说,一个应用的启动过程是指,用户点击应用图标开始,到用户看到该应用的第一个界面为止。具体可以分为下面几个时间段:用户点击应用图标~main函数执行前在该阶段,系统会加载可执行文件(应用的 .o 文件集合),加载动态链接库,调整 rebase 指针并进行符合绑定。Objc 会初始化,包括 Objc 相关类的注册,分类(category)的注册以及选择器(sel...原创 2020-01-15 23:48:51 · 223 阅读 · 0 评论 -
UITableView 协议知识点
两个协议的细节: UITableViewDelegate, UITableViewDataSource, and heightForRowAtIndexPath在 iOS 开发中,UITableView 无疑是最常使用的控件之一。其几乎被用于所有的 iOS 应用中,API 设计之经典,足以满足大多应用场景并完成许多繁重的任务。作为苹果工具箱中少有的具有两个协议的(UITableViewDeleg...翻译 2019-12-25 00:37:02 · 194 阅读 · 0 评论 -
推送通知小结
推送通知小结这里所说的推送通知与通知代理中的推送不同,前者是面向用户的,是用来告知用户一些事情,无论应用是否开启,而后者(NSNotification)是面向程序的,用于应用中线程间的通信。原创 2017-08-20 22:13:22 · 521 阅读 · 0 评论 -
FMDB 框架小结
FMDBFMDB 框架是对 SQLite 数据库 C 语言接口的 Objective-C 封装,即对 sqlite3.h 文件中相关接口的封装。sqlite3 的使用十分简单,主要是下面两个对象、常用函数的使用:sqlite3sqlite3_stmtsqlite3_open()sqlite3_prepare()sqlite3_bind()sqlite3_step()sqlite...原创 2019-05-08 09:54:00 · 503 阅读 · 0 评论 -
弱引用的使用
弱引用的使用在一些情况下,可能需要使用某个实例,但是又不想对其进行强引用而导致其不能被释放。通常情况下,我们可以直接使用 NSPointerArray 、 NSHashTable 或 NSMapTable 类,创建一个持有弱引用实例的集合,那么当添加到集合中的实例被释放时,相应的其也会被移出该集合。另外,在将基本类型添加到集合中时,我们需要借助 NSValue 类对其进行包装,而该类中的 N...原创 2019-05-13 09:22:04 · 949 阅读 · 0 评论 -
Masonry 框架小结
Masonry 框架小结自从 iOS 6.0 苹果引入自动布局以来,经过不断的发展,其已经成为我们进行 UI 布局的主要技术之一。在 Autolayout 之前,可以使用 Autoresizing 来约束视图的父子关系,但是局限性很大,很多任务无法实现,如其不能约束兄弟视图之间的关系。相比之下,Autolayout 的功能则强大的多,其核心概念便是参照和约束。NSLayoutConstrai...原创 2019-06-10 10:27:27 · 781 阅读 · 0 评论 -
UIActivityViewController
UIActivityViewControlleriOS 系统中提供了一些标准服务,如拷贝文本到剪切板、分享图片或链接到社交媒体、发送邮件等等。我们可以通过这个类来调用这些标准的服务:NSString *shareText = @"百度";UIImage *shareImage = [UIImage imageNamed:@"icon"];NSURL *shareUrl = [NSURL ...原创 2019-06-17 13:46:26 · 1012 阅读 · 0 评论 -
UILayoutGuide
NSLayoutAnchor在 iOS 9.0 之后,UIView 中新增了一个 UIViewLayoutConstraintCreation 分类,该分类声明了一些 NSLayoutAnchor 属性,用来简化视图约束的创建。NSLayoutAnchor 虽然给出了 NSLayoutXAxisAnchor、NSLayoutYAxisAnchor、NSLayoutDimension 三个子类,...原创 2019-06-12 09:45:01 · 1206 阅读 · 0 评论 -
代码细节
代码细节@interface ZKRRootViewController : UIViewController/** 内容视图,是 view 的子视图,大小为去除状态栏的屏幕大小, 所有的其他视图内容都应放在该视图内 */@property (nonatomic, strong) UIView *contentView;/** 显示导航栏使用该属性,自动调整 conte...原创 2019-07-12 18:07:33 · 179 阅读 · 0 评论 -
类库封装
类库封装通常,我们会将一些自定义的通用类封装为一个 .a 或 .framework 类库,这样有利于代码的复用和维护。并且,还可以将不同的业务拆分为多个类库,以便将维护任务分配给多个项目组。这样有利于业务的快速更新,而且不同业务之间可以通过公开接口快速相互嵌入。在创建类库时,可以直接创建一个单独的类库工程,也可以在已存在的工程中以添加 Target 的形式创建类库工程。两者没有什么太大的区别,...原创 2019-07-16 17:38:32 · 392 阅读 · 0 评论 -
NotificationCenter
NotificationCenterNotificationCenter 框架提供了实现桌面通知中心组件的接口,主要包含一个类和一个协议。NCWidgetController该类主要用来设置桌面中的组件是应该隐藏还是显示,例如,在点击组件跳转到主应用程序后,需要隐藏组件。或者,在使用主应用程序添加某些事项后,需要其显示在桌面组件中。+ (instancetype)widgetContro...原创 2019-03-23 20:46:11 · 633 阅读 · 0 评论 -
iOS 设备与其配件间的通信
the translate of 《About External Accessory》该官方文档介绍了苹果设备与其配件之间数据传输的方法翻译 2017-03-28 23:39:10 · 1517 阅读 · 0 评论 -
UIViewController小结
UIViewController概述UIViewController 分为两类,一种是内容控制器,用来管理应用中各个独立的内容模块;另一种是容器控制器,其收集其他控制器的信息,以不同的方式显示这些控制器的内容。原创 2017-11-19 21:59:28 · 927 阅读 · 0 评论 -
unrecognized selector sent to instance
在编写程序的过程中,即使编译通过,但是在运行的过程中,偶尔会有类似 unrecognized selector sent to instance 的错误。原创 2017-10-23 19:31:09 · 6558 阅读 · 0 评论 -
iOS 导航控制器小结
UINavigationController 导航控制器 UINavigationController 是 UIViewController 的子类,但它是用来管理一系列 UIViewController 实例对象的类。原创 2017-10-22 19:06:59 · 454 阅读 · 0 评论 -
iOS 时间表示小结
iOS 时间表示小结NSDate不同地区的时间表示方法不同,而 NSDate 只是保存一个绝对的时间点,通过计算与转化,其在不同地区、时区或历法下能够得到有意义的时间。原创 2017-09-29 23:23:24 · 857 阅读 · 0 评论 -
The action could not be completed.Try again.
最近遇到一个问题,情形如下:在 Xcode 的偏好设置中添加开发者账号时,总是失败,提示错误信息:The action could not be completed.Try again.原创 2017-08-02 17:35:09 · 741 阅读 · 0 评论 -
Quartz 2D 概述
Quartz 2D 学习总结Quartz 2D 是 Core Graphics 框架的一部分,可用于编辑、绘制图像,创建或显示位图图像,并且可操作 PDF 文档。原创 2017-07-16 23:46:10 · 371 阅读 · 0 评论 -
Core Data 基本用法
Core Data 的基本使用方法原创 2017-06-26 00:10:57 · 523 阅读 · 0 评论 -
使用Xcode编码没有提示
使用Xcode编码时,没有自动提示转载 2017-03-22 23:30:07 · 442 阅读 · 0 评论 -
UITableView 的横向滑动实现
UITableView 的横向滑动实现通过 CGAffineTransformMakeRotation(CGFloat angle) 旋转 UITableView 实现可以横向滑动的控件原创 2017-03-26 02:07:19 · 2714 阅读 · 0 评论 -
iOS技术小结
iOS基础技术小结原创 2017-03-19 00:57:09 · 376 阅读 · 0 评论 -
iOS 多线程小结
iOS 多线程小结在 iOS 系统中,应用打开后会生成一个进程,这个进程保存程序运行过程中的资源,进程会开启一个主线程执行代码。原创 2017-11-27 22:55:20 · 329 阅读 · 0 评论 -
UIView 小结
UIView当 UIView 中的内容被渲染后,渲染的结果会被保存,当 UIView 发生大小或旋转等几何变化时,其内容并不会重新绘制,而是根据 UIVIew 的属性 contentMode 值进行相应的变化。原创 2017-12-30 20:15:07 · 255 阅读 · 0 评论 -
MVVM 框架简介
MVVM 在 iOS 中的应用MVVM(Model View ViewModel)是基于 MVC(Model View Controller)和 MVP(Model View Presenter)发展起来的一种新的软件设计框架,并且其包含有 WPF 的特性。 WPF(Windows Presentation Foundation)是微软在 .NET Framework 3.0 开始推出原创 2018-02-07 09:20:24 · 7333 阅读 · 1 评论