iOS开发地毯式攻略
iOS开发地毯式攻略
熊小憨
这个作者很懒,什么都没留下…
展开
-
iOS开发技巧
iOS开发技巧原创 2022-08-05 11:55:02 · 527 阅读 · 1 评论 -
iOS合并frameworks
目标:合并x86_64、arm64、armv7s生成frameworksXcode->Targets->Build Settings必做:Architectures设置为:$(ARCHS_STANDARD)、arm64、armv7sValid Architectures设置为:arm64、armv7s、x86_64可选:Base SDK设置为:iOSSupporte...原创 2018-10-31 19:25:16 · 349 阅读 · 0 评论 -
IJKPlayer简析
IJKPlayer通过IJKFFMoviePlayerController管理播放器。IJKFFMoviePlayerController里的代码过多,无法梳理。通过删除代码,保留核心,可以了解其调用方式。#import "IJKMediaPlayback.h"#import "IJKFFOptions.h"@interface LivePlayerController : NS原创 2017-08-18 14:56:02 · 999 阅读 · 0 评论 -
IJKPlayer安装与配置
IJKPlayer是基于FFmpeg的视频直播框架。1. 下载:https://github.com/Bilibili/ijkplayer2. 安装进入文件夹的根目录,阅读README.md。首先初始化,运行./init-ios.sh然后进入ios目录,运行./compile-ffmpeg.sh clean./compile-ffmpeg.sh all3原创 2017-08-18 14:03:40 · 822 阅读 · 0 评论 -
ios网络请求报错:the App Transport Security policy requires the use of a secure connection
iOS9引入了新特性:App Transport Security (ATS),新特性要求App内访问的网络必须使用HTTPS协议。但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全。现在也不能马上改成HTTPS协议传输。最终找到以下解决办法:在Info.plist中添加NSAppTransportSecurity类型的Dictionary。在NSAppTrans原创 2015-10-11 08:35:58 · 2490 阅读 · 0 评论 -
ios工程如何添加pch文件
首先定位到下面的位置其次在输入框中输入下面的代码$(SRCROOT)/PrefixHeader.pch最后创建pch文件,并输入内容即可原创 2015-10-09 22:48:40 · 320 阅读 · 0 评论 -
mac系统下更新gem
sudo gem update --system就是这么简单原创 2015-10-09 22:03:44 · 625 阅读 · 0 评论 -
CocoaPods如何安装及使用
如何下载和安装CocoaPods?首先查看来源地址列表$ gem sources -l然后替换来源地址$ gem sources --remove https://rubygems.org/$ gem sources -a http://ruby.taobao.org/然后看看来源地址列表有什么改变$ gem sources -l最后安装cocoapods$ sud原创 2015-10-01 12:52:03 · 261 阅读 · 0 评论 -
消息转发防止Crash
@implementation NSObject (Crash)+ (void)load { [self exchangeInstanceMethodWithOriginalSelector:@selector(methodSignatureForSelector:) swizzledSelector:@selector(crash_methodSignatureForSelector...原创 2019-12-26 16:28:02 · 210 阅读 · 0 评论 -
iOS第三方库
推送极光推送 https://www.jiguang.cn/崩溃bugly https://bugly.qq.com原创 2019-11-11 18:19:23 · 92 阅读 · 0 评论 -
AutoreleasePool
如何调试示例代码:// 1. 声明方法extern void _objc_autoreleasePoolPrint(void);// 2. 打印信息_objc_autoreleasePoolPrint();案例由于使用autoreleasepool需要autorelease方法需要将Build Settings -> Objective-C Automatic Refer...原创 2019-10-29 14:26:03 · 217 阅读 · 0 评论 -
Weak
示例代码:__weak NSObject *object;{ NSObject *object_1 = [NSObject new]; NSLog(@"Retain Count = %ld", CFGetRetainCount((__bridge CFTypeRef)(object_1))); object = object_1; NSLog(@"Retain...原创 2019-10-28 19:52:14 · 119 阅读 · 0 评论 -
GCD定时器
GCD定时器直接调用内核方法,与RunLoop无关也就是说,拖动UI控件,不会影响到GCD定时器原创 2019-10-26 23:39:07 · 405 阅读 · 0 评论 -
CADisplayLink
一个计时器对象,使任务以与屏幕刷新率相同的频率被执行使用方法1@property (nonatomic, strong) CADisplayLink *displayLink;// 1. 初始化self.displayLink = [CADisplayLink displayLinkWithTarget:对象 selector:@selector(方法)];// 2. 加入RunLo...原创 2019-10-26 19:05:10 · 259 阅读 · 0 评论 -
NSMethodSignature、NSInvocation
NSMethodSignature用于生成方法的返回值和参数的类型信息的记录示例代码:# 生成方法签名NSMethodSignature *signature = [NSMethodSignature signatureWithObjCTypes:"v@:"];# 获取对象方法的方法签名NSMethodSignature *signature = [[对象 class] instan...原创 2019-10-26 16:51:47 · 248 阅读 · 0 评论 -
引用计数
如何查看对象的引用计数printf("Retain Count = %ld", CFGetRetainCount((__bridge CFTypeRef)(对象)));原创 2019-10-26 13:26:59 · 133 阅读 · 0 评论 -
推荐
数据结构与算法严蔚敏 《数据结构》《大话数据结构与算法》网络《HTTP权威指南》《TCP/IP详解卷1:协议》架构与设计模式https://github.com/skyming/Trip-to-iOS-Design-Patternshttps://design-patterns.readthedocs.io/zh_CN/latest...原创 2019-10-25 16:53:57 · 96 阅读 · 0 评论 -
设计模式
什么是设计模式是一套被反复使用、代码设计经验的总结使用设计模式的好处是:可重用代码、让代码更容易被理解、保证代码可靠性一般与编程语言无关,是一套比较成熟的编程思想设计模式的分类创建型模式:对象实例化的模式,用于解藕对象的实例化过程。例如:单例模式、工厂方法模式结构型模式:把类或对象结合在一起形成一个更大的结构。例如:代理模式、适配器模式、组合模式、装饰模式行为型模式:类或对象之...原创 2019-10-25 16:43:32 · 83 阅读 · 0 评论 -
架构
什么是架构软件开发中的设计方案类与类之间的关系、模块与模块之间的关系、客户端与服务端的关系有哪些架构MVC、MVP、MVVM、VIPER、CDD三层架构、四层架构MVCModelControllerView优点:Model、View可以重复利用缺点:Controller的代码过于臃肿MVC变种ControllerViewModel优点:- 对Controller瘦...原创 2019-10-24 23:07:17 · 119 阅读 · 0 评论 -
安装包瘦身
安装包(IPA)主要由可执行文件、资源文件组成资源文件(图片、音频、视频等)瘦身采取无损压缩去除没有用到的资源:https://github.com/tinymind/LSUnusedResources可执行文件瘦身编译器优化Strip Linked Product、Make Strings Read-Only、Symbols Hidden by Default设置为YES去...原创 2019-10-24 20:17:17 · 180 阅读 · 0 评论 -
启动优化
应用的启动分为2种冷启动(Cold Launch):从零开始启动应用热启动(Warm Launch):应用已经在内存中,在后台存活着,再次点击图标启动应用启动分析可以通过添加环境变量打印应用的启动时间分析(Edit scheme -> Run -> Arguments -> Environment Variables)将DYLD_PRINT_STATISTICS设...原创 2019-10-23 23:38:07 · 201 阅读 · 0 评论 -
耗电优化
耗电的主要来源CPU处理:Processing网络:Networking定位:Location图像:Graphics耗电优化尽可能降低CPU、GPU功耗少用定时器优化I/O操作:尽量不要频繁写入小数据,最好批量一次性写入读写大量重要数据时,考虑用dispatch_io,其提供了基于GCD的异步操作文件I/O的API。用dispatch_io,系统会优化磁盘访问数据量比...原创 2019-10-23 22:54:26 · 185 阅读 · 0 评论 -
卡顿检测
造成卡顿的原因是主线程执行了比较耗时的操作可以添加Observer到主线程RunLoop中,通过监听RunLoop状态切换的耗时,达到监控卡顿的目的也可以使用第三方库LXDAppFluecyMonitor...原创 2019-10-23 22:35:02 · 262 阅读 · 0 评论 -
离屏渲染
渲染方式OpenGL中,GPU有2种渲染方式On-Screen Rendering:当前屏幕渲染,在当前用于显示的屏幕缓冲区进行渲染操作Off-Screen Rendering:离屏渲染,在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作离屏渲染消耗性能的原因需要创建新的缓冲区离屏渲染的整个过程,需要多次切换上下文环境:先是从当前屏幕(On-Screen)切换到离屏(Off-Scr...原创 2019-10-23 22:27:36 · 206 阅读 · 0 评论 -
CPU和GPU
CPU负责:对象的创建和销毁对象属性的调整布局计算文本的计算和排版图片的格式转换和解码图像的绘制(Core Graphics)GPU负责:纹理的渲染工作流程:计算渲染读取显示CPUGPU帧缓存视频控制器屏幕...原创 2019-10-23 21:46:12 · 100 阅读 · 0 评论 -
读写安全
需求,多读单写,经常用于文件等数据的读写操作:同一时间,只能有1条线程进行写的操作同一时间,允许有多条线程进行读的操作同一时间,不允许既有写的操作,又有读的操作pthread_rwlock示例代码:#import <pthread.h>@property (nonatomic, assign) pthread_rwlock_t rwlock;// 1. 初始化...原创 2019-10-23 12:15:32 · 130 阅读 · 0 评论 -
线程同步
OSSpinLockos_unfair_lockpthread_mutexdispatch_semaphoredispatch_queue(DISPATCH_QUEUE_SERIAL)NSLockNSRecursiveLockNSConditionNSConditionLock@synchronized原创 2019-10-20 16:17:52 · 117 阅读 · 0 评论 -
多线程队列组
实现功能:异步并发执行任务1、任务2等任务1、任务2都执行完毕后,再回到主线程执行任务3示例代码:dispatch_group_t group = dispatch_group_create();dispatch_queue_t queue = dispatch_queue_create("queue_label", DISPATCH_QUEUE_CONCURRENT);dispa...原创 2019-10-19 23:57:52 · 103 阅读 · 0 评论 -
多线程
pthread一套通用的多线程API,适用于Unix/Linux/Windows等系统,跨平台/可移植使用难度大基于C语言由程序员管理线程生命周期几乎不用NSThread使用更加面向对象简单易用,可直接操作线程对象基于OC语言由程序员管理线程生命周期偶尔使用GCD旨在替代NSThread等线程技术充分利用设备的多核基于C语言自动管理线程生命周期经常使用...原创 2019-10-18 22:16:17 · 100 阅读 · 0 评论 -
CoreData
1. 创建Data Model鼠标右键弹出菜单,选择New File,再选择Core Data下的Data Model,创建xcdatamodeld类型的文件Data Model中,点击Add Entity按钮,创建新的Entity,并在Attributes下设置属性2. 创建上下文导入库和设置属性#import <CoreData/CoreData.h>@proper...原创 2019-10-15 11:47:03 · 145 阅读 · 0 评论 -
Socket
命令行连接Socket服务安装telnetbrew install telnet连接sockettelnet IP地址 端口号原创 2019-10-14 18:17:10 · 249 阅读 · 0 评论 -
动态编码
字符串转类对象let namespace = Bundle.main.infoDictionary["CFBundleExecutable"]let class = NSClassFromString(namespace + "." + "类名")原创 2019-10-14 15:21:37 · 910 阅读 · 0 评论 -
Info.plist
切换显示方式点击Info.plist,右侧显示文件内容文件内容里点击鼠标右键Property List Type选项卡里的Default for File Type切换为None原创 2019-10-14 15:05:41 · 126 阅读 · 0 评论 -
UITabBarController
添加子ViewControllerlet viewController = UIViewController()viewController.tabBarItem.title = titleviewController.tabBarItem.image = imageviewController.tabBarItem.selectedImage = selectedImagelet na...原创 2019-10-14 12:55:41 · 86 阅读 · 0 评论 -
StoryBoard
将StoryBoard中的ViewController移动到新的StoryBoard中StoryBoard中选中需要移动的ViewControllerEditor -> Refactor to Storyboard输入新的文件名和存储路径,点击Save按钮...原创 2019-10-14 12:18:27 · 302 阅读 · 0 评论 -
UIImage
使用原始图片(防止TabBar改变图片样式)let image = UIImage(named: "图片名称")imageView.image = image?.withRenderingMode(.alwaysOriginal)原创 2019-10-14 12:03:52 · 272 阅读 · 1 评论 -
UITabBar
设置全局的TabBar外观在AppDelegate的application(_ application: didFinishLaunchingWithOptions launchOptions:)里加入代码:UITabBar.appearance().tintColor = UIColor.orange原创 2019-10-14 11:50:19 · 90 阅读 · 0 评论 -
密码
原则不允许在网络上传递明文的用户隐私信息不允许在本地保存明文的用户隐私信息RSA非对称加密公钥加密,私钥解密私钥加密,公钥解密哈希(散列)特点:算法公开加密相同的数据,得到一样的结果加密不同的数据,得到定长的结果(32位字符,a~z,0~9)信息摘要(信息指纹),用来识别数据不能反算数据用途:密码(服务器也不知道用户的真实密码)搜索版权破解:目前...原创 2019-10-12 23:20:36 · 189 阅读 · 0 评论 -
RunLoop
RunLoop是什么什么是RunLoop,顾名思义,RunLoop就是在‘跑圈’,其本质是一个do while循环。一般来讲,一个线程一次只能执行一个任务,执行完成后线程就会退出。如果我们需要一个机制,让线程能随时处理事件但并不退出,通常的代码逻辑是这样的:do {//接受消息->等待->处理}while(message != quit)线程执行了这个函数后,就会一直处于这...原创 2019-10-10 22:43:38 · 137 阅读 · 0 评论 -
RunTime
Runtime是什么?Runtime是指将数据类型的确定由编译时推迟到了运行时Runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime是Object-C的幕后工作者Object-C需要Runtime来创建类和对象,进行消息发送和转发Runtime用来...原创 2019-10-09 00:44:45 · 106 阅读 · 0 评论