iOS-开发知识点
harkecho
这个作者很懒,什么都没留下…
展开
-
RAC(ReactiveCocoa)之 RAC宏定义
RAC宏定义原创 2022-10-21 21:20:21 · 290 阅读 · 1 评论 -
Podfile 解析最佳实践
基本语法首先需要做的是,看懂一个 Podfile。那么需要了解一些最基本的 ruby 语法,这部分非常简单:source 'https://github.com/CocoaPods/Specs.git'platform :ios, '8.0'pod 'FLEX', :configurations => ['Debug'], :branch => 'develop'use_frameworks!以上三行代码是 Podfile 中最为常见的,其实这三行是在调用不同的方法。方法调用原创 2021-10-13 10:31:41 · 853 阅读 · 0 评论 -
iOS copy属性与setter赋值
NSString什么时候用copy,什么时候用strong结论:一般情况下,我们都不希望字串的值跟着mutableStr变化,所以我们一般用copy来设置string的属性。如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain。注意:上面的情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。把一个原创 2021-07-01 12:15:00 · 570 阅读 · 1 评论 -
OC参数传递的那些坑
OC参数传递的那些坑有一些原本我们认为很基础的,而且很理所当然的,在实践之后才发现,原来跟想象的不同回顾一下c语言的参数传递C语言中的参数传递1、传值方式原理:形参和实参占不同内存单元,传递的实际上是实参变量或表达式的一个拷贝副本,将这个副本值传给形参,形参内存单元内容保存的正是这个副本值,相当于给形参进行初始化,形参的值发生变化也不会传回给实参,因此是单向传递。例如: void increase(int x) { x++; }当在主函数中调用上面这个函数时,会在ncrease函原创 2021-06-23 17:46:18 · 604 阅读 · 1 评论 -
OC中的block
Block是将(函数)及其(执行上下文)封装起来的(对象)// MCBlock.m- (void)method{ int multiplier = 6; int (^Block)(int) = ^int(int num) { return num * multiplier; }; Block(2);}源码解析,使用 clang -rewrite-objc file.m 命令查看编译之后的文件内容结构体构造函数中第一个参数是函数指针,第二个参数block的描述,第三个参数是blo.原创 2020-09-02 10:55:56 · 429 阅读 · 0 评论 -
iOS内存管理方案
不同场景下的内存管理方案:1 小对象采用TaggedPointer2 Arm64架构下的iOS应用程序采用的是NONPOINTER_ISA(本身占64bit位,实际上32位就够用了,剩余的苹果为了提高内存的利用率,剩余位存储了内存管理相关的内容)第一位如果是0代表isa只是存isa指针的,如果是1代表是优化过的,第2位表示当前对象是否有关联对象has_assoc,第三位has_cxx_dtor表示当前变量是否用到c++代码或者c++一些内容,第4位到第32位(也就是33位)是当前对象的类对象的指针地址原创 2020-09-01 23:08:51 · 412 阅读 · 0 评论 -
内存泄漏和野指针
内存泄漏:是指在堆区,alloc 或new 创建了一个对象,但是并没有放到自动释放池中,或者没有free 对象,导致这块内存一直被占用,换一种方法说,就是没有指针指向这块内存,再通俗点,开辟了一段空间,在没有被释放之前,结果找不到这块内存了,这样就会造成内存泄漏的问题。这块内存会直至程序运行结束才会被释放。野指针:是指针指向已经delete 的对象,或者是未申请访问的受限制的区域的时候,会造成野指针指向,直接使程序奔溃。如何形象的解释内存泄漏和野指针内存泄漏:首先要说到如何为一块变量申请一块内存空间。原创 2020-08-27 16:16:27 · 340 阅读 · 0 评论 -
view Layout
原创 2020-08-27 16:07:21 · 129 阅读 · 0 评论 -
UncaughtExceptionHandler
61.常见的Exception Type1 EXC_BAD_ACCESS在开发过程中,总是会遇到各种Exception,在此总结一些常见的Exception。NSInvalidArgumentException错误类型 NSInvalidArgumentExceptionlog输出 unrecognized selector sent to instance xxxx错误释义 给实体对象发送了不认识的消息,即对象调用方法出错错误基本原因 Objective-C的方法调用其实是基于消息传递机制,原创 2020-08-27 15:24:52 · 1783 阅读 · 0 评论 -
CTMediator解析
模块解耦手段实现模块之间真正的解耦才算是真正的模块化自己的理解1 面向接口调用(遵守协议,实现协议方法,依赖协议), 即新开一个对象ModuleManager,提供一个registerClass:forProtocol的方法,注册protocol与class进行配对,调用是,通过protocol找到class返回给业务方,这里protocol的两个作用,1是key值,2是起到定义调用接口的作用,可以定义任意类型的参数2 面向自定义协议调用,采用现成的协议如url协议,统一实现本地和远程跳转,实现业原创 2020-08-26 11:27:57 · 788 阅读 · 0 评论 -
iOS preferredstatusbarstyle 不执行
UINavgationController中覆写preferredStatusBarStyle方法不执行的问题#import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad{ [super viewDidLoad];} -(UIStatusBarStyle)preferredStatusBarStyle{原创 2020-08-10 12:33:54 · 1021 阅读 · 0 评论 -
Safari 的[开发] 菜单中看不到 iOS模拟器设备
最近写h5,跟iOS原生联调发现Safari[开发]看不到iOS模拟器设备解决办法:Have you tried simply relaunching Safari after Simulator starts running?I find that Simulator is always in Safari’s Develop menu if it’s already running when Safari launches, and Simulator is never in the menu原创 2020-07-16 08:50:31 · 1939 阅读 · 0 评论 -
iOS缓存 NSCache详解及SDWebImage缓存策略源码分析
本篇文章首先会详细讲解NSCache的基本使用,NSCache是Foundation框架提供的缓存类的实现,使用方式类似于可变字典,由于NSMutableDictionary的存在,很多人在实现缓存时都会使用可变字典,但NSCache在实现缓存功能时比可变字典更方便,最重要的是它是线程安全的,而NSMutableDictionary不是线程安全的,在多线程环境下使用NSCache是更好的选择。接着,会通过源码讲解SDWebImage的缓存策略。最后简要补充了第三方YYCache的实现思路。NSCache原创 2020-06-24 06:28:23 · 542 阅读 · 0 评论 -
NSOperation与NSOperationQueue
与 GCD 不同的是,Operation Queues 不遵循先进先出的顺序。以下是 Operation Queues 和 Dispatch Queues 的不同:1: 不遵循 FIFO(先进先出):在 Operation Queues 中,你可以设置 operation(操作)的执行优先级,并且可以在 operation 之间添加依赖,这意味着你可以定义某些 operation,使得它们可以在另外一些 operation 执行完毕之后再被执行。这就是为什么它们不遵循先进先出的顺序。2: 默认情况下 O原创 2020-06-23 07:31:31 · 275 阅读 · 0 评论 -
dispatch_barrier_sync 和dispatch_barrier_async的区别
需求:有4个任务{1,2,3,4},执行完前2个再执行后2个这里我们用到栅栏函数dispatch_barrier_(a)sync,(也可以用队列组),我们要注意的是不能使用全局并发队列(系统提供给我们的)否则会散失栅栏函数的意义区别:先看官方文档dispatch_barrier_sync: Submits a barrier block object for execution and waits until that block completes.(提交一个栅栏函数在执行中,它会等待栅栏函数执行完原创 2020-06-20 08:58:19 · 1083 阅读 · 0 评论 -
UIView的生命周期二
UIView生命周期相关函数//构造方法,初始化时调用,不会调用init方法- (instancetype)initWithFrame:(CGRect)frame;//构造方法,内部会调用initWithFrame方法- (instancetype)init;//xib归档初始化视图后调用,如果xib中添加了子控件会在didAddSubview方法调用后调用- (instancetype)initWithCoder:(NSCoder *)aDecoder;//唤醒xib,可以布局子控件-原创 2020-06-19 17:26:14 · 670 阅读 · 0 评论 -
UIViewController添加addChildViewController过程
父控制器 CodeInitViewController.m#import "CodeInitViewController.h"#import "CodeInitChildViewController.h"@interface CodeInitViewController ()@end@implementation CodeInitViewController+ (void)load { [super load]; NSLog(@"CodeVC %s "原创 2020-06-19 16:37:55 · 596 阅读 · 0 评论 -
iOS别人的面试问题(一)
师大小海腾iOS相关总结南华CoderiOS底层Swift开发小记MAC及Flutter1、什么是多态2、@synthesize和@dynamic3、block(底层结构和类型,循环引用, 使用类似_name访问self的成员变量依然会循环引用)4、deleagte5、block和deleagte的优缺点6、类的结构7、消息发送过程以及转发(https://minilv.github.io/2019/03/17/Runtime-消息机制土味讲解/)8、响应者链条9、strong和原创 2020-06-18 15:23:44 · 244 阅读 · 0 评论 -
FPS
FPS 是测量用于保存、显示动态视频的信息数量,每秒钟帧数愈多,所显示的动作就会愈流畅,一般应用只要保持 FPS 在 50-60,应用就会给用户流畅的感觉,反之,用户则会感觉到卡顿FPS(Frames Per Second)。Frame rate (expressed in frames per second or FPS) is the frequency (rate) at which consecutive images called frames are displayed in an ani原创 2020-06-16 14:54:57 · 494 阅读 · 0 评论 -
NSError笔试题
// 编译错误 NSError *error = nil;// NSError **pError = &error; ////Pointer to non-const type 'NSError *' with no explicit ownership 报错 指向没有明确所有权的非 常量类型“ NSError *”的指针 // 编译正确 NSError *error1 ...原创 2020-06-02 15:27:30 · 258 阅读 · 0 评论 -
NSInteger,NSUInteger,CGFloat
前导int:4个字节,一个字节8位,占32位的整数long:8个字节,占64位的整数(3)在int与long前加上unsigned 表示无符号(4)float:占32位的浮点数(5)double:占64位的浮点数NSInteger、NSUInteger、CGFloat不是类,而是基本数据类型NSInteger在32系统中就是int,在64位系统中就是long, 现在咱们的苹果真机都是64位系统NSUInteger在32系统中就是unsigned int,在64位系统中就是unsigned原创 2020-06-02 10:56:58 · 1059 阅读 · 0 评论 -
OC将对象存入NSUserDefault的过程
首先说下 NSUserDefault可以存储的类型有: /** Key-Value Store: NSUserDefaults stores Property List objects (NSString, NSData, NSNumber, NSDate, NSArray, and NSDictionary) identified by NSString keys, similar to an NSMutableDictionary. */原创 2020-05-29 09:52:31 · 619 阅读 · 0 评论 -
应用程序的状态
应用程序的状态:程序运行状态启动程序2020-05-24 06:42:15.167855+0800 OCTestFirst[803:160828] willFinishLaunchingWithOptions2020-05-24 06:42:15.168024+0800 OCTestFirst[803:160828] didFinishLaunchingWithOptions2020-05-24 06:42:15.229819+0800 OCTestFirst[803:160828] Did原创 2020-05-24 06:52:31 · 263 阅读 · 0 评论 -
globalBlock, stackBlock,mallocBlock区别
在ARC中,没有捕获外部变量的block是_NSGlobalBlock_捕获了外部变量的block类会是_NSMallocBlock_或者_NSStackBlock如果,block被赋值给某个变量,在这个过程中会执行_block_copy将原来_NSStackBlock_变成NSMallocBlock,但是如果block没有赋值给某个变量,那他的类型是_NSStackBlock1 全局block定义在函数外部的block是global类型的定义在函数内部的block,但是没有捕获任何自动变量.原创 2020-05-24 06:26:44 · 622 阅读 · 0 评论 -
const 的使用
const和宏分别使用的场景 const的用法实例1 const的用法实例2 extern外部引用const常量的用法 const外部类的引用.h文件 const外部类引用.m文件 使用extern 的duplicate错误代码可下载: 链接: https://pan.baidu.com/s/1pLSxkzL 密码: tpqj使用extern创建新的const类的正确代码可下载: 点原创 2016-08-23 09:01:35 · 208 阅读 · 0 评论 -
iOS 远程推送
JPush在iOS平台上的集成 推送原理和demo 在iOS 平台上大部分应用是不允许在后台运行并保持网络链接的,在应用没有被运行的时候,只能通过APNS服务把数据发送到终端用户。 上图为注册推送的过程 下面是推送通知到设备应用的原理图首先手机应用向APNS服务器申请推送服务,在注册成功后会收到苹果下发的deviceToken到设备,应用能够通过回调获得deviceToken,这个tok原创 2016-11-04 12:03:09 · 414 阅读 · 0 评论 -
iOS本地推送
本地推送介绍本地推送和远程推送的功能是一样的,都是要提醒用户去做某些事情。但是和远程推送不同的就是本地推送是不需要设备联网的,而远程推送是必需要设备联网的,因为只有联网状态下,才能和苹果的APNs服务器建立长连接,从而推送消息。本地推送是由App自己设定的,并且发送给安装此App的这台设备,属于一对一的对应关系。 本地推送适合日历 to-do list等类型的App,注意:一个App最多只能设置6原创 2016-11-07 14:34:55 · 223 阅读 · 0 评论 -
静态库(Static Library)和动态框架(Dynamic Framework)
静态库(.a文件),是一系列从源码编译的目标文件的集合,是源码的实现所对应的二进制。配合上公共的.h文件,可以获取到.a中暴露的方法或者成员变量,在最后编译app的时候.a将被链接到最终的可执行文件中,之后每次都随着app的可执行二进制文件一同加载 在iOS 8之前,iOS 只支持以静态库的方式来使用第三方的代码动态框架(Dynamic Framework) 动态框架是以.framework结尾转载 2016-11-02 15:31:30 · 3028 阅读 · 0 评论 -
NSOperationQueue API
1、 iOS最常用的线程有以下三种, 1).、NSThread 2)、Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3)、GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高原创 2016-12-06 10:22:09 · 222 阅读 · 0 评论 -
presentViewController的问题
presentViewController 两次后到达第最后一个viewController,然后要回到第一个presentViewController时要在那个按钮的部位 注册通知,在前面两个viewController添加通知,(viewDidLoad)添加通知,一定要记得在dealloc中吧通知remove掉,再添加第一个页面的通知 时,要注意有延迟几秒钟,只有那个viewControll原创 2017-11-07 07:43:49 · 420 阅读 · 0 评论 -
指针指向相同地址
指针指向相同地址: 当指针指向同一个地址则任何一方改变就是改变了这个地址中的值 如 self.styleSettingsViewController.textStyle = self.currentTextStyle;原创 2017-11-07 07:44:27 · 455 阅读 · 0 评论 -
获取一段文字中,有(回车)换行符"\n"的位置数组
获取一段文字中,有(回车)换行符”\n”的位置- (NSArray *)rangeOfParagraphForCurrentText:(NSString *)myText{ NSInteger location = 0; NSInteger length = myText.length; NSArray *components = [myText componentsSeparatedBy原创 2017-11-07 07:45:19 · 1337 阅读 · 0 评论 -
反向搜索
反向搜索NSRange range2 = [@"胡明你好瓦尼卡师卡尔得" rangeOfString:@"瓦尼卡" options:NSBackwardsSearch];指定范围进行搜索NSRange range1 =NSMakeRange(0,10);range1 = [@"胡明你好瓦尼卡师卡尔得原创 2017-11-07 07:46:40 · 1280 阅读 · 0 评论 -
UITextView的typingArributes
@property(nonatomic,copy) NSDictionary<NSString *, id> *typingAttributes默认设置的字体(lldb) po self.wordView.typingAttributes{LMParagraphType = 0;NSColor = "UIExtendedGrayColorSpace 0 1";NSFont = "<UICT原创 2017-11-07 07:47:45 · 453 阅读 · 0 评论 -
UIFontDescriptor
通过UIFontDescriptor来调节字体的样式和字体的大小。 普通默认的UIFontDescriptor样式为(lldb) po self.wordView.font.fontDescriptorUICTFontDescriptor <0x6040000aa380> = {NSCTFontUIUsageAttribute = CTFontRegularUsage;NSFontSizeA原创 2017-11-07 07:48:30 · 1088 阅读 · 0 评论 -
清除caches文件夹下的某个子文件夹中的缓存
#define PATH_OF_CACHES [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]清除目录为default和OnlineDownloadSkyFile文件夹下的缓存NSFileManager *fileManager = [NSFileManager d原创 2017-11-08 08:13:01 · 864 阅读 · 0 评论 -
计算caches文件夹下某个文件夹中的大小
#define PATH_OF_CACHES [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]self.dataLb.text = [NSString stringWithFormat:@”%ld kB”,[PATH_OF_CACHES fileSize]]; N原创 2017-11-08 08:20:19 · 263 阅读 · 0 评论 -
github中值得借鉴
OHHTTPStubs 5.1.0iOS开发中使用NSURLProtocol拦截HTTP请求如何进行HTTP Mock (iOS)ProtocolKit如何在Objective-C 中实现协议扩展FBRetainCycleDetector 0.1.2如何在iOS中解决循环引用的问题坚持NSObject对象持有的强指针如何实现iOS中的Associated ObjectiOS中的block是如何持有对原创 2017-11-08 17:25:15 · 280 阅读 · 0 评论 -
HTML5实现APP和原生方式的差距
与原生的APP比起来纯H5 APP还是有很多问题 可以查看这个链接讲的很好,下面是具体的内容1、动画动画有很多种,比如侧边栏菜单的滑入滑出、元素的响应动画、页面切换之间的过场等等,在H5之下的众多实现方法都没有办法达到纯原生的性能。一般这些的话有几种不同的选择:css3动画,javascript动画,原生动画。css3动画非常的消耗性能,如果某一个元素用到css3动画可能还看不出来,但大面积或过场原创 2017-11-09 10:06:16 · 3093 阅读 · 0 评论 -
判断APP是原生的还是H5页面
现在APP开发模式是Hybrid APP开发 (即混合模式,半原生半H5页面) 原生的是Native APP H5就是Web App在Hybrid当中,如何判断APP页面是原生的还是H5页面呢, 1 ,看断网情况 把手机的网络断掉,然后点开页面,然后可以正常显示的东西是原生写的, 显示404或者错误页面的是html页面2,下拉页面的时候显示网址提供方的一定是H53、下拉刷新的时候如果有明显原创 2017-11-09 12:33:33 · 1243 阅读 · 0 评论