![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
iOS开发
文章平均质量分 67
powerof10
Be Brilliant
展开
-
NSOperation的串行、并行及自定义NSOperation的使用
1. NSBlockOperation使用start使用start直接调用是同步的,在当前线程执行#import <Foundation/Foundation.h>int main(){ //Demo1: start NSLog(@"当前线程是%@",[NSThread currentThread]); NSBlockOperation *blockOperation1 = [NSBlockOperation blockOperationWithBlock:原创 2021-05-07 16:51:18 · 495 阅读 · 0 评论 -
在macOS上使用OpenSSL库(x86、iOS arm64两种)
1. 注意macOS移除了openssl库,要使用需要将编译好的静态库(.a文件)进行静态链接不同平台上的需要的静态链接库文件不一样,很多教程没有说明是针对哪个平台的,X86和iOS开发(arm64)所需的静态链接文件是不一样的,路径设置也不同2.必备的文件openssl文件夹中包含静态库lib及头文件include静态库中之需要包含libssl.a 与 libcrypto.a两个文件3. 通用的部分都需要将包含lib和include的openssl文件夹添加到项目中,注意用拷贝而原创 2021-04-29 20:57:19 · 3392 阅读 · 1 评论 -
unsigned char转为16进制字符串、以及C++的std:string转为OC的NSString
需求调用C++的openssl/md5的API,计算文件的md5,函数如下:int MD5_Final(unsigned char *md, MD5_CTX *c);最终得到的md5值是一个128bits 的unsigned char数组,即16个字符,md5值一般表示为16进制的32位字符串,即每个unsigned char表示为2个字符的Hex字符串封装的这个接口输入为PHAsset或NSURL,返回值为NSString,因此最终需要将C++的string转为Objective-C的NS原创 2021-04-27 12:41:57 · 4393 阅读 · 0 评论 -
通过localIdentifier获取iOS相册的视频文件及指针
步骤1. 通过localIdentifier获取PHAsset2. 通过PHAsset获取AVAsset3.通过AVAsset获取文件的相对路径4.直接使用C语言的文件API访问这个文件 NSString *localID = @"230CF8EB-8ABD-4C0F-A289-6D909C23B63A/L0/001"; PHFetchResult *result = [PHAsset fetchAssetsWithLocalIdentifiers:@[localID] option原创 2021-04-25 17:33:39 · 888 阅读 · 0 评论 -
关于addChildVC、removeFromParentVC的生命周期问题
1. 场景需要将ViewController B作为childVC添加到ViewController A [superVC.view addSubview:childVC.view]; [superVC addChildViewController:childVC]; [childVC didMoveToParentViewController:superVC];为什么要调用- (void)didMoveToParentViewController:(nullable UIViewContro原创 2021-04-22 15:13:40 · 626 阅读 · 0 评论 -
iOS富文本与UILabel动态调整高度的场景、注意事项和示例
场景弹出的卡片View,有多个UILabel,每个UILabel可能有1~2行文字除了UILabel还有UIImageView、UIButton等控件根据UI提供的sketch中相邻UI控件的高度(cur.top = last.bottom + distance)最后可以得出整个卡片view的height因此需要根据文字动态的调整UILabel的行高方法试了好几种方法,有一种比较好用- (CGRect)boundingRectWithSize:(CGSize)size options:原创 2021-04-20 11:02:09 · 665 阅读 · 0 评论 -
NSString的stringWithFormat用法
stringWithFormat的用法类型转换NSInteger转为NSString,获得unix时间戳,占位符为%zd NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]; NSInteger timeStamp = timeInterval; NSString *timeStampString = [NSString stringWithFormat:@"%zd",timeStamp];u原创 2021-04-09 14:58:59 · 1407 阅读 · 0 评论 -
NSMutableString的用法
创建NSMutableString首先是NSString的子类,因此可以用NSString的方法创建 NSInteger number = 20; NSMutableString *string = [NSMutableString stringWithFormat: @"Hello World %zd", number];NSMutableString是长度可变的,可以一开始指定一个长度,这只是一个建议的值,会随着拼接的字符串动态的增加 NSMutableString *stri原创 2021-04-09 12:13:17 · 168 阅读 · 0 评论 -
Objective-C使用SHA256、Base64(对比python)
1. stringWithFormat的用法类型转换NSInteger转为NSString,获得unix时间戳,占位符为%zd NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]; NSInteger timeStamp = timeInterval; NSString *timeStampString = [NSString stringWithFormat:@"%zd",timeStamp];原创 2021-04-08 21:35:38 · 490 阅读 · 0 评论 -
可变容器的深浅拷贝问题
结论copy自不可变、或者mutableCopy自可变、不可变的容器,都是容器对象的深拷贝上面的深拷贝只是容器对象,容器里的值还是浅拷贝的使用copy修饰property、直接copy 可变字典两种情况,查看容器对象和容器里值的地址情况://TestObject.h#import <Foundation/Foundation.h>@interface TestObject : NSObject@property(nonatomic, copy) NSDictionary原创 2021-04-07 14:27:22 · 76 阅读 · 0 评论 -
block的循环引用问题
循环引用示例block会对block中的对象进行持有操作,如果block中的对象又持有了该block就会造成循环引用典型的场景就是block作为self的属性使用时,又在block调用了self的属性或方法,代码如下// Test.h#import <Foundation/Foundation.h>typedef void (^MyBlock)();@interface Test@property(nonatomic,copy) MyBlock blockTest;@原创 2021-02-09 13:08:22 · 246 阅读 · 0 评论 -
ObjC的isa指针与消息传递机制
isa指针ObjC中有3个层次的对象:实例对象Instance、类对象Class、元类MetaClassClass即自定义的类,是实例对象的类对象,类对象又是对应元类的实例对象,它们的关系图如下isa指针的作用是可以通过它找到对应的类对象或元类中的方法,例如Instance对象可以在其类对象中找到它的实例方法,Class对象可以在元类中找到它的类方法类方法与实例方法类方法属于类对象,用+号修饰,类似于C语言中的static方法(可以用无需实例对象而用类名访问、只能调用类方法而不能调用实例方原创 2021-02-09 12:24:07 · 114 阅读 · 0 评论 -
Category与Extension
1. Category1.1 定义与特点ObjC语言的一个灵活的类扩展机制,可以在不知道原有代码的基础上向一个已存在类添加新的方法不能修改、删除已有方法,对扩展开放、对修改封闭,体现了面向对象的OCP原则,降低了代码的耦合度。类别扩展的新方法有更高优先级,会覆盖类中已有的同名方法;声明的方法可以不实现,但不实现时不可以调用此方法1.2 关于添加变量只能添加扩展方法,不能添加成员变量因为Category是运行期决议,运行时对象的内存布局已经确定,objc_class结构体大小已确定,无法再原创 2021-02-09 12:14:14 · 104 阅读 · 0 评论 -
ObjC的property修饰符与深浅拷贝
1. property1.1 定义及用法property相当于 ivar + 存取方法默认生成getter、setter以及带下划线的变量名,使用点语法可以调用存取方法点语法在左边时调用setter,就是把右边的值赋给self.xxx,相应的点语法在右边就是调用getter1.2 几种修饰符读写语义:readonly:表示修饰的属性只读,只有getter没有setterreadwrite:修饰的属性可读可写,既有getter也有setter默认读写语义参数为readwrite原子原创 2021-02-09 11:55:18 · 147 阅读 · 0 评论 -
iOS Demo-Movie Searcher
1. 简介1.1 APIhttps://www.omdbapi.com/是一个获取电影数据的API网站获取的Json如下:1.2 数据结构根据Json设计数据结构如下:Swift 4引入了Codable协议,与NSCoding协议不同的是:如果自定义的类中全都是基本数据类型、基本对象类型,无需再实现编解码,只需要在自定义的类声明它遵守Codable协议即可原Json中的Type与Swift的关键字冲突了,使用CodingKeys替换变量名struct MovieResult: Co原创 2021-02-08 16:56:42 · 206 阅读 · 0 评论 -
UITabBarController嵌套UINavigationController切换页面
1. 都是视图控制器的管理容器UINavigationController以栈的形式保存视图控制器,使用push将视图控制器入栈、pop移除栈顶控制器,pop后视图控制器对象会被释放UITabBarController用于不同视图控制器间的切换,切换视图时视图控制器不会被销毁,通常作为整个程序的rootViewController下面是苹果推荐的方式将导航控制器嵌套在UITabBarController中,能够在不同的标签项里实现不同的层次结构...原创 2021-02-07 23:11:50 · 434 阅读 · 0 评论 -
iOS从网络获取Json并解析
Demo代码地址:JsonRequest1. 简介一个获取日出日落时间的API网站Sunset and sunrise times API提供API,为给定的经纬度提供日出日落时间等效果URL:https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400返回的Json数据 {"results": {"sunrise":"7:14:21 AM", "sunset":"5:49:11 PM".原创 2021-02-07 00:17:25 · 771 阅读 · 0 评论 -
iOS解析本地Json
Demo代码地址:FileParsingJson1. 本地Json文件与运行效果{ "jsonData": [ { "title": "水果", "items": [ "苹果", "香蕉", "梨", "西瓜" ] }, { .原创 2021-02-06 22:04:34 · 717 阅读 · 1 评论 -
待办清单-iOS项目说明
1.功能与ViewController介绍(补充图)1. 查看已有待办分类,并可以新增、编辑待办分类,并为该分类选择图标每个分类显示其中还未完成的项目,这是AllListsViewController新增、编辑待办分类,这是ListDetailViewController为分类选择图标,这是IconPickerViewController2. 每个分类中有它的待办清单,可以新增、编辑待办事项,并可选择提醒时间、是否提醒可以点击行来标记是否完成该事项,这是ChecklistsV原创 2021-01-26 22:05:54 · 686 阅读 · 2 评论 -
iOS多线程之GCD
一、基本概念GCD 全称 Grand Central Dispatch,又称大中央调度,对线程操作进行了封装并提供简洁的C语言接口1. 串行队列与并发队列串行队列:任务按 FIFO 的顺序执行,同一时间只执行一个任务,按FIFO的顺序执行完毕并发队列:任务按 FIFO 的顺序开始执行,同一时间可执行多个任务,任务完成的顺序不可预测2. 同步派发和异步派发GCD将 block 任务块派发到指定队列中执行,有同步、异步两种方式1. 同步派发 dispatch_sync会阻塞当前线程原创 2021-01-29 14:25:26 · 307 阅读 · 1 评论