
OC学习小记
文章平均质量分 69
OC的学习
一人前行
如果你觉得迷茫,不知道自己的目标是什么,那就读书吧,把自己的工作做到极致!
展开
-
iOS 删除float小数点后多余的0,如:10.020000 修改成10.02
删除小数点后面多余的0,比如90.00100可以转换成90.001。新建一个NSString的分类。转载 2024-06-27 17:11:16 · 237 阅读 · 0 评论 -
Apple账号密码自动填充
这个功能已经推出比较久了,在WWDC17上,苹果发布的iOS11,其中带来了App密码自动填充的这一新的API。这一功能的实现能够让用户更方便的管理密码,更容易在我们的应用上登录。密码自动填充简化了iOS应用和网页的登录和帐户创建任务。只需轻点几下,您的用户就可以创建并保存新密码或登录现有帐户。用户甚至不需要知道他们的密码;系统处理一切。这种便利性增加了用户完成应用程序登录或注册流程并更快地开始使用您的应用程序的可能性。此外,通过鼓励用户选择唯一的强密码,您可以提高应用的安全性。转载 2024-06-03 14:06:45 · 444 阅读 · 0 评论 -
iOS 获取设备的唯一标识
iOS设备唯一标识的方案转载 2024-04-25 15:29:38 · 2505 阅读 · 0 评论 -
苹果审核警告:ITMS-91053: Missing API declaration
苹果审核隐私声明原创 2024-04-24 10:31:43 · 2258 阅读 · 0 评论 -
dyld: Library not loaded: /System/Library/Frameworks/SwiftUI.framework/SwiftUI 的错误
当回部署到不包含 SwiftUI 框架的操作系统时,将 -weak_framework SwiftUI 标志添加到其他链接器标志设置在构建设置"选项卡中。我在所有正确的位置使用 @available(iOS 13.0, *) 并且没有编译器警告并且该应用程序在 iOS 13 上完美运行。一切正常,直到我在 iOS 12 设备上运行它.该应用程序立即崩溃,我收到的警告说无法加载 SwiftUI.我决定在我的应用中使用 SwiftUI 实现一些视图.该应用向后兼容 iOS 12.转载 2024-02-01 15:50:48 · 1019 阅读 · 3 评论 -
xcode15编辑完后的项目,在iOS12 跑不起来
【代码】xcode15编辑完后的项目,在iOS12 跑不起来。转载 2024-01-26 11:43:57 · 571 阅读 · 0 评论 -
ios中相机UIImagePickerController按钮文字为中文
找到info.plist的Localization Native Development Region,把en(或者$(DEVELOPMENT_LANGUAGE))改为zh-Hans。UIImagePickerController是一个简单的获取照相和相册中图片的工具,是系统自有的,但是默认按钮都是英文的,为此我们需要修改为简体中文。转载 2023-12-08 11:53:00 · 383 阅读 · 0 评论 -
iOS 制作私有库framework + 图片资源的使用
将framework拖到需要使用的工程目录下,为了方便管理添加的framework库,我在工程目录下创建了一个“Library”文件夹,我添加的路径,如下图。如果代码中引用到了其他的三方库,例如AFN, Masonry等等,那么也需要在framework的工程中集成过来,保证能编译成功。Framework中 图片的获取,注意需要区分@2x.png 和 @3x.png , 图片的名称必须写全,否则会找不到图片的。在自动生成的IGLiveSDK的.h 文件中,加入需要暴露的头文件, 格式应该是用"“原创 2023-06-22 17:42:09 · 3065 阅读 · 0 评论 -
将ipa包上传到服务器供测试人员下载
一个是上架AppStore一个是放到自己的http/https服务器上,通过自己的网页下载。上架AppStore可能会遇到一些限制,审核严格,过程坎坷,这里主要介绍如何放到自己的http服务器上以供外部玩家进行下载安装ipa。注意,必须使用企业证书打的ipa包或者”AH-hoc 打的包“才可以通过自己的http/https服务器下载安装。原创 2023-06-02 18:14:20 · 1312 阅读 · 0 评论 -
iOS-发布代码到cocoapods上
前言不知道你们是否好奇过,SDWebImage的代码,为什么podfile中配置一下,然后pod isntall就可以下载下来?我们应该如何才可以开发一个可以用cocoapods管理的开源库?一、 原理从上图来看,大概需要了解这几个流程:我们的代码,需要push 到 trunk库中;trunk 会更新到 github的specs repo库更新后,我们才能用pod install 安装我们push上去的代码。二、过程2.1 创建工程用命令行进入工程要创建的位置cd /Us原创 2021-02-22 20:36:01 · 892 阅读 · 0 评论 -
OC --利用OSS图片云存储解决图片缩放的问题
最近项目中使用阿里云OSS云存储解决方案来处理图片, 根据需要, 需要在OSS图片的全路径URL上拼接缩放等参数, 来限定在不同手机机型上面的显示大小和清晰度, 为此, 我们暂且封装了OSS图片存储缩放处理的几个方法, 上传到cocoapods 公共库,方便调用一 OSSImageMaker 简单介绍采用链式调用, 调用更简单目前仅仅实现了Resize图片的缩放根据iOS不同设备自动转换@2x和@3x的计算, 比如Frame 100 * 200 的imageView, 经过处理后会返回一张 在2转载 2020-11-13 17:34:13 · 1247 阅读 · 0 评论 -
charlse抓包和Mock数据
1. 安装charlse百度搜索charles,第一个地址官方链接了:https://www.charlesproxy.com如果没安装java环境,首次进入charles会提示需要安装java包,下一个java包就可以了。安装后,长这样的。2.设置网络a.进入系统偏好设置中的网络,查看当前的ip地址b、将移动设备和电脑设备设置为同一个网络c、设置移动设备的网络代理进入无线局域网的高级设置页面,找到HTTP代理字样。选中手动代理,并在服务器中填自己电脑查到的ip地址,然后把端口调8转载 2020-11-07 21:47:48 · 963 阅读 · 0 评论 -
01-动画的了解之CALayer
1.CALayer1.1 CALayer的了解在 iOS框架中,你能看得见摸得着的东西基本上都是UIView,例如按钮、文本、输入框、图标等都是UIView。其实UIView之所以能显示在屏幕上,是因为它内部有一个图层;在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性可以访问这个图层:@property(nonatomic,readonly,strong) CALayer *layer; 当UI原创 2020-10-29 11:21:52 · 391 阅读 · 0 评论 -
探讨iOS 中图片的解压缩到渲染过程
一.图像从文件到屏幕过程通常计算机在显示时是CPU与GPU协同合作完成一次渲染。接下来我们了解一下CPU/GPU等在这样一次渲染过程中,具体的分工是什么?CPU: 计算视图frame,图片解码,需要绘制纹理图片通过数据总线交给GPUGPU: 纹理混合,顶点变换与计算,像素点的填充计算,渲染到帧缓冲区。时钟信号:垂直同步信号V-Sync / 水平同步信号H-Sync。iOS设备双缓冲机制:显示系统通常会引入两个帧缓冲区,双缓冲机制对于应用来说,图片是最占用手机内存的资源,将一张图片从磁盘中加转载 2020-10-21 11:56:03 · 278 阅读 · 0 评论 -
OC-AutoRelease的了解
1.前言随着Xcode的发展,我们已经不需要自己手动管理OC对象的引用计数了;编译器在编译的时候会根据环境上下文帮我们自动添加上管理的代码。创建一个项目,我们把环境切换到MRC下,看看如果不自己手动管理内存对象会怎么样。如下图,新建一个项目,把环境切换到MRC下:新建一个Person的类,添加如下的代码:-------.h-----------@interface Person : NSObject@property (nonatomic, copy) NSString *name;原创 2020-10-19 14:03:40 · 396 阅读 · 0 评论 -
OC-主线程调dispatch_semaphore_wait的坑,线程会卡死
我们都知道线程同步方案中dispatch_semaphore是一个很不错的选择,但是dispatch_semaphore如果在线程中等待,另外开启线程再回到主线程释放信号,就会出现信号卡死的情况。信号量的使用简单回顾一下信号量的使用,API如下:// 创建信号量,参数:信号量的初值,表示最多几个资源可访问。dispatch_semaphore_create(信号量值)//等待信号量dispatch_semaphore_wait(信号量,等待时间)//发送信号量dispatch_semapho原创 2020-10-14 11:34:47 · 8316 阅读 · 1 评论 -
iOS 线程同步(加锁)的方案
OSSpinLockOSSpinLock叫做“自旋锁”, 等待锁的线程会处于忙等状态,一直占用这CPU资源。缺点:目前已经不再安全,可能会出现优先级反转问题。如果等待锁的线程优先级较高,它会一直占用CPU资源,优先级低的线程就无法释放锁。例如,有两个贤臣:thread1 (优先级比较高)thread2 (优先级比较低)thread2 先用OSSpinLock加锁,此时thread1 进来,一看代码已经被加锁。那么此时,优先级高的线程会一直判断是否加锁;如果加锁了,就继续一直判断,那么C原创 2020-10-10 11:47:56 · 678 阅读 · 1 评论 -
程序启动原理和UIApplication
一、UIApplication1.简单介绍(1)UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序;(2)每一个应用都有自己的UIApplication对象,而且是单例的,如果试图在程序中新建一个UIApplication对象,那么将报错提示;(3)通过[UIApplication sharedApplication]可以获得这个单例对象;(4) 一个iOS程序启动后创建的第一个对象就是UIApplication对象,且只有一个(通转载 2020-10-09 12:03:30 · 495 阅读 · 0 评论 -
有时候加载转圈显示不出来的原因
问题:有一次在做视频分享到会话的功能中,添加了[MBProgressHUD showHUDAddedTo:self.view animated:YES]提示;但是发送的时候,这个转圈并没有显示出来。方案:苦思良久,无解。问了边上的大神,大神说,估计是因为在压缩视频的时候,阻塞了线程导致加载转圈的UI显示不出来了。按照大神的提示,加上GCD异步加载的方法,果真可以了。给大神点赞。...原创 2020-07-30 20:14:55 · 986 阅读 · 0 评论 -
iOS获取手机具体型号(更新到iPhone SE2)
在网上找到很多文件,大多都只是更新到了7P,特地搜集了一下,可以查询用户手机的具体型号:#import <sys/utsname.h>//要导入头文件+ (NSString *)getCurrentDeviceModel{ struct utsname systemInfo; uname(&systemInfo); NSString *deviceModel = [NSString stringWithCString:systemInfo.machine原创 2020-07-21 17:41:22 · 941 阅读 · 0 评论 -
OC-tableView去掉指定行cell的分割线
historyCell.separatorInset = UIEdgeInsetsMake(0, 0, 0, SCREEN_WIDTH * 2);//SCREEN_WIDTH 是屏幕宽的宏定义,乘于2 是因为,如果只是屏幕的宽度的话,可能会有一部分的线还可以看到原创 2020-07-15 17:24:35 · 755 阅读 · 0 评论 -
新建项目在iOS13上黑屏解决及其他适配(含暗黑适配)
iOS 13 启动黑屏的解决更新Xcode之后,新项目需求,新建项目发现多了如图1所示两个新的文件SceneDelegate.h和SceneDelegate.m运行之后发现黑屏,无论是真机还是模拟器都不行,换到iOS12的手机上则可以正常运行。查看官方文档,SceneDelegate是为了优化启动和实现iPad多任务处理功能(在ipad上同时打开多个窗口)做出的改动,将原本在AppDelegate里的生命周期相关方法和window分离出来。iOS13以前:AppDelegate管理App的生命周转载 2020-06-28 16:51:15 · 3610 阅读 · 1 评论 -
iOS 属性的重写问题
问题描述当子类继承父类时,一般是可以调用父类的属性,但是不能调用父类的成员变量;那比较麻烦的一个情况是,当重写父类的setter方法时,就无法给成员变量赋值。如下图:问题的原因在 OC 中属性就是给一个类的成员变量提供封装,通过声明属性,我们可以很简单的为一个成员变量定义其是否是只读的还是读写的,是否是原子操作的等等特性。也就是说如果说封装是为成员变量套了一层壳的话那么 @property关键字做的事情就是预定义这层壳是个什么样子的壳,然后通过 @sythesize关键字生成真正的壳并把这转载 2020-06-18 15:50:50 · 1826 阅读 · 0 评论 -
OC中goto语句的使用
前言Objective-C提供了goto语句来执行跳转,这种goto语句功能非常强大,它被称为无条件跳转,但由于goto语句功能太强大,而且这种跳转完全是随心所欲的,因此过度使用goto语句会导致程序的可读性大幅度降低,在此建议尽量少用goto语句。goto语句的使用goto语法需要在其后面紧跟一个标签,这个标签用于标识goto语句将会跳转到哪里。示例代码: int i = 0; // 定义一个循环计数变量 start : // start为goto的标转载 2020-06-11 10:34:33 · 717 阅读 · 0 评论 -
iOS OC内联函数 inline
inline在iOS中的一些框架中,static inline是经常出现的关键字组合.static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A.不会导致重名的错误.inline.内联函数.作用:替代宏.在框架中出现inline时,如YYKit框架.我们稍加观察就会发现它出现在.h文件中static inline CGSize YYTextClipCGSize(CGSize size) { if (size.width > YY转载 2020-06-08 18:08:44 · 399 阅读 · 0 评论 -
CAShapeLayer介绍
CAShapeLayer继承自CALayer,可使用CALayer的所有属性CAShapeLayer需要和贝塞尔曲线配合使用才有意义。贝塞尔曲线可以为其提供形状,而单独使用CAShapeLayer是没有任何意义的。使用CAShapeLayer与贝塞尔曲线可以实现不在view的DrawRect方法中画出一些想要的图形。关于CAShapeLayer和DrawRect的比较DrawRect:DrawRect属于CoreGraphic框架,占用CPU,消耗性能大CAShapeLayer:CAS..转载 2020-05-22 18:19:52 · 2153 阅读 · 0 评论 -
iOS贝塞尔曲线的了解与小案例
UIBezierPath中文叫贝塞尔曲线,其作用是** UIBezierPath 类允许你在自定义的 View 中绘制和渲染由直线和曲线组成的路径**。 你可以在初始化的时候, 直接为你的 UIBezierPath 指定一个几何图形, 路径可以是简单的几何图形例如: 矩形、椭圆、弧线之类的, 也可以是相对比较复杂的由直线和曲线组成的多边形。 当你定义完图形以后, 你可以使用额外的方法将你的路径直接绘制在当前的绘图上下文中。方法说明方法说明之创建一个贝塞尔曲线创建并且返回一个新的 UIBezier.原创 2020-05-22 18:09:15 · 671 阅读 · 0 评论 -
iOS 设置试图4个不同的圆角
代码如下:+ (void)setCornerWithLeftTopCorner:(CGFloat)leftTop rightTopCorner:(CGFloat)rigtTop bottomLeftCorner:(CGFloat)bottemLeft bottomRightCorner:(CGFloat)bottemRight view:原创 2020-05-18 18:40:04 · 3072 阅读 · 1 评论 -
iOS - 对接系统自带“File”app即(文件)app的实战
1.前言:每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。如下图:沙盒中相关路径 AppName.app应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以不能在运行时对...原创 2020-02-23 15:51:43 · 17928 阅读 · 5 评论 -
[Sourcetree] 使用 SourceTree 管理SVN 代码仓库
众所周知SourceTree是一款十分方便的Git管理工具,当然,也可以使用他来管理SVN托管的代码。使用SourceTree来管理SVN的代码仓库,不能像Git仓库那样直接从URL来Clone,应该先通过指令在本地创建SVN- Git仓库,然后,将该仓库添加到SourceTree中进行管理;创建本地仓库首先,在本地创建一个空白文件夹,使用cd指令...转载 2020-01-16 15:26:00 · 9008 阅读 · 2 评论 -
[Cocoapods]第三方库管理工具Cocoapods安装及使用
转载地址:https://www.jianshu.com/p/9727434520b0简介CocoaPods是一个负责管理iOS项目中第三方开源代码的工具,使用CocoaPods可以节省设置和更新第三方开源库的时间并提高工作效率。下面简单介绍一下,怎样安装Cocoapods:一. 搭建ruby环境一般Mac OS已经自带Ruby环境,可在终端输入ruby -v查看当前版本...转载 2020-01-16 15:22:27 · 279 阅读 · 0 评论 -
OC-RunLoop深入了解
1.什么是RunLoopRunLoop的字面意思是运行循环,是在程序在运行过程中保持循环做一些事情,也就是保持程序的持续运行。每条线程都有唯一的一个与之对应的runloop对象,主线程的Runloop已经自己创建好,子线程的runloop需要主动创建。RunLoop在第一次获取时创建,在线程结束时销毁。主线程的runloop是默认开启的,iOS应用程序里面,程序启动后会调用main函数,mai...原创 2020-01-06 10:20:00 · 586 阅读 · 0 评论 -
OC-Runtime API可能用到的方法
1.类相关的接口动态创建一个类(参数:父类,类名,额外的内存空间)Class objc_allocateClassPair(Class superclass, const char *name, size_t extraBytes)注册一个类(要在类注册之前添加成员变量)void objc_registerClassPair(Class cls)销毁一个类void objc_di...原创 2020-01-02 17:36:53 · 120 阅读 · 0 评论 -
OC-Block的本质
1.block的本质block其实就是封装了函数调用以及环境变量调用的对象。2.block的定义return_type (^blockName)(parameters)3.block的本质结构新建工程,在main.m中添加如下的代码:int age = 10;void (^blockame)(void) = ^{ NSLog(@"logBlock = %d", ...原创 2019-12-26 11:23:42 · 239 阅读 · 0 评论 -
Category底层结构原理分析
1.Category底层结构1.1 Category代码转成C++在项目中新建一个Person的分类为Person+Test,里面添加一些属性和类方法以及对象方法,如下:@interface Person (Test)@property (nonatomic, assign) int age;@property (nonatomic, copy) NSString *name;...原创 2019-12-25 17:26:54 · 320 阅读 · 0 评论 -
OC-KVO的本质分析
KVO的全称是Key-Value Observing,俗称“键值监听”,可以用于监听某个对象属性值的改变。1.KVO的使用代码如下:@interface Person : NSObject@property (nonatomic, assign) int age;@end----使用----@interface ViewController ()@property...原创 2019-12-23 21:42:22 · 169 阅读 · 0 评论 -
OC的本质
1.OC的本质是什么?OC的对象和类是基于C/C++的结构体来实现的。OC的代码转换过程如下:OC->C/C++ ->汇编语言 -> 机器语言。2.如何查看OC的代码转成了C/C++的代码呢?例如创建了一个工程,名字为OC-01,编写代码如下:@interface Student : NSObject@end@implementation Stude...原创 2019-12-22 11:03:07 · 363 阅读 · 0 评论 -
iOS-Super的理解
先给一个面试题:打印结果如下:答案是否与预期的设想一样呢?1.官方如何解释super关键字的?super的官方解释如下:从官方解释,可以明确了解到当我们使用“super”关键字发送消息的时候,编译器会转化为调用objc_msgSendSuper这个方法来发送消息。查看runtime的源码,了解objc_msgSendSuper的定义如下:objc_msgS...原创 2019-12-18 19:03:04 · 671 阅读 · 0 评论 -
RunTime-ISA底层了解
1.Runtime的简介Runtime是一套C语言的API,封装了很多动态性相关的函数;OC的动态性就是由Runtime来支撑和实现的。平时编写的OC代码,底层都是转换成了Runtime API进行调用。具体应用:利用关联对象给分类添加属性 遍历类的所有成员属性,动态修成其属性值(例如,修改textFile的占位文字颜色、字典转模型、自动归档解挡) 交换方法的实现 利用消息转...原创 2019-12-16 12:18:07 · 218 阅读 · 0 评论 -
关联对象 AssociatedObject 完全解析
写在前面这篇文章包含了两方面的内容: 使用关联对象为已经存在的类中添加属性 关联对象在底层 Objective-C 中的实现 注:如果你刚刚入门 iOS 开发,笔者相信了解第一部分的内容会对你的日常开发中有所帮助,不过第二部分的内容可能有些难以理解。如果你对关联对象的使用非常熟悉,可以直接跳过第一部分的内容,从这里开始深入了解其底层实现。关联对象的应用关于关...转载 2019-12-13 13:41:23 · 202 阅读 · 0 评论