
OC
文章平均质量分 53
ACERROR
去码头搞点薯条
展开
-
RunLoop理解(五)NSTimer
NSRunLoop 与 NSTimer原创 2021-12-28 17:03:19 · 1387 阅读 · 0 评论 -
RunLoop理解(四)与线程的关系
RunLoop与线程的关系原创 2021-12-28 16:42:43 · 1503 阅读 · 0 评论 -
RunLoop理解(三)事件循环机制
RunLoop 事件循环机制原创 2021-12-28 11:40:20 · 1113 阅读 · 0 评论 -
RunLoop理解(二)数据结构
RunLoop数据结构原创 2021-12-27 20:19:09 · 588 阅读 · 0 评论 -
RunLoop理解(一)
RunLoop理解原创 2021-12-27 15:52:28 · 544 阅读 · 0 评论 -
ARC下dealloc的研究
ARC dealloc原创 2021-12-27 15:25:16 · 286 阅读 · 0 评论 -
WKProcessPool 理解
WKProcessPool用来配置进程池,与网页视图的资源共享有关提示:WKProcessPool类中没有暴露任何属性和方法,配置为同一个进程池的WebView会共享数据,例如Cookie、用户凭证等,开发着烤肉呀通过编写管理类来分配不同维度的WebView在不同进程池中。WKProcessPool是什么?一个WKProcessPool对象表示WebContent进程池,进程池关联一个指定WebViewConfiguration的WebView,每个Web视图都有自己的Web内容进程,直到达到实现定义原创 2021-12-23 20:59:27 · 2236 阅读 · 0 评论 -
WKWebView 详解和一些问题处理
全网WKWebView详解原创 2021-12-23 19:14:30 · 2939 阅读 · 0 评论 -
OC属性关键字和所有权修饰符
OC关键字和所有权修饰符原创 2021-12-21 20:29:45 · 637 阅读 · 0 评论 -
关于KVO的一些总结------已完结
关于KVO的一些总结原创 2021-12-10 20:04:14 · 2542 阅读 · 0 评论 -
KVC总结-------已完结
KVC总结原创 2021-12-08 21:21:36 · 1884 阅读 · 0 评论 -
宏判断是ARC还是MRC
宏判断是ARC还是MRC原创 2021-12-07 21:08:36 · 1486 阅读 · 0 评论 -
Block详解------已完结
1.Block的使用Block是什么?块,封装了函数调用以及调用环境的OC对象,Block的声明//1.@property (nonatomic, copy) void(^myBlock1)(void);// 2.BlockType:类型别名typedef void(^BlockType)(void);//3.//返回值类型(^block变量名)(参数1类型,参数2类型, ...)void(^block)(void);Block的定义// ^返回值类型(参数1,参数2,...){原创 2021-12-02 21:25:56 · 2651 阅读 · 0 评论 -
Objective-C基础
Objective-C是C语言的严格超集,--任何C语言程序不经修改就可以直接通过Objective-C编译器,在Objective-C中使用C语言代码也是完全合法的。Objective-C被描述为盖在C语言上的薄薄一层,因为Objective-C的原意就是在C语言主体上加入面向对象的特性。Objective-C的面向对象语法源于Smalltalk消息传递风格。所有其他非面向对象的语法,包括变量类型,预处理器(preprocessing),流程控制,函数声明与调用皆与C语言完全一致。但有些C语言语法合法代码原创 2021-11-19 14:28:00 · 2184 阅读 · 0 评论 -
2021-11-15
iOS8.0之后我们可以使用WebKit框架中的WKWebView来加载网页,WKWebView可将网页处理限制在App的网页视图中,从而确保不安全的网站内容不会影响到App的其他部分,并且苹果表示2020年12月起将不再接受使用UIWebView的App更新,因此我对WKWebView的使用方法及在使用WKWebView的过程中遇到的问题进行了总结。首先WKWebView的优点很多了,内存开销比UIWebView小很多,支持了更多的HTML5特性,流程粒度上更加细致,可以在请求时候询问是否请求数据还可以原创 2021-11-15 11:07:54 · 229 阅读 · 0 评论 -
EnumerateObjectsUsingBlock使用
遍历字典时Block版本的字典遍历可以同时取key和value而for in只能取key再手动取valueNSDictionary *dict = @{@"a": @"1", @"b": @"2"};[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"key: %@, value: %@", key, obj);}];对于耗时且顺序无关的遍历,使用并发版本的blck,-(v原创 2021-10-28 14:42:43 · 813 阅读 · 0 评论 -
对象dealloc监控demo
学习了部分runtime的知识后,准备动手做个有意思的东西来见证自己最近学习的成果。就写一个debug环境下对象的监控的demo吧。在OC中,所有对象均是继承来自NSObject,所以实现步骤:1.我们要利用Category创建一个NSObject的分类,就叫Debug.h吧,加入两个接口用来供外界启动检测。2.延迟判断该对象是否正常销毁,需要创建一个服务类,为了避免服务类自身的循环引用,需要创建一个代理类来保存启动的服务对象(是否必要?__weak 代替),在服务类的初始化中初始化代理类,然后启原创 2021-10-26 20:13:42 · 953 阅读 · 0 评论 -
objc_setAssociatedObject 关联详解
objc_setAssociatedObject 关联详解1.关联 关联是指把两个对象互相关联起来,使得其中的一个对象作为另一个对象的一部分。 关联特性是在Mac OS 10.6及以后的版本上才是可用的。2.关联本质-在类的定义之外为类增加额外的存储空间使用关联,我们可以不用修改类的定义而为对象增加额外的存储空间。这在我们无法访问到类的源码的时候或者是考虑到二进制兼容的时候是非常有用。关联是基于关键字的,因此,我们可以为任何对象增加任意多的关联,每个都使用不同的关键字即可。关联是可以保证被关联原创 2021-10-26 16:44:13 · 459 阅读 · 0 评论 -
Runtime详解(三)Category底层原理
Category(分类)简介Category(分类)是Objective-C 2.0 添加的语言特性,主要作用是为已经存在的类添加分类。Category可以做到既不子类化,也不侵入一个类的源码的情况下,为原有的类添加新的方法,从而实现扩展一个类或者分离一个类的目的。在日常开发中我们常常使用Category为已有的类扩展功能。虽然继承也能为已有类增加新的方法,而且还能直接增加属性,但继承关系增加了不必要的代码复杂度,在运行时,也无法与父类的原始方法进行区分。所以我们可以优先考虑使用自定义Category(原创 2021-10-26 10:16:33 · 193 阅读 · 0 评论 -
Runtime详解(二)Method Swizzling
本文用来介绍ios开发中【Runtime】中的黑魔法Method Swizzing。通过本文,您将了解到:1.Method Swizzling(动态方法交换)简介2.Method Swizzling 使用方法(四种方案)3.Method Swizzling 使用注意4.Method Swizzling 应用场景 4.1全局页面统计功能 4.2字体根据屏幕尺寸适配 4.3处理按钮重复点击 4.4TableView、CollectionView 异常加载占位图 4.5APM(应用性能原创 2021-10-11 17:12:41 · 321 阅读 · 0 评论 -
深入理解Runtime(一)
1.什么是RunTime?我们都知道,将源代码转换为可执行的程序,通常要经过三个步骤:编译、链接、运行。不同的编译语言,在这三个步骤中所进行的操作又有些不同。C语言作为一门静态类语言,在编译阶段就已经确定了所有变量的数据类型,同时也确定好了要调用的函数,以及函数的实现。而Objective-C语言是一门动态语言。在编译阶段并不知道变量的具体数据类型,也不知道所真正调用的哪个函数。只有在运行时间才能检查变量的数据类型,同时在运行时才会根据函数名查找要调用的具体函数。在这样在程序没运行的时候,我们并不知道原创 2021-09-29 17:37:42 · 463 阅读 · 0 评论 -
异步方法改为同步
__block NSString *resultMessage;dispatch_semaphore_t semaphore = dispatch_semaphore_creat(0);[self Function:message callback:^(NSString * _Nonnull result) { resultMessage = result; dispatch_semphore_signal(semaphore);}];dispatch_sempahore_wait(semaph原创 2021-08-30 20:40:58 · 895 阅读 · 0 评论 -
OC 属性特性 @property详解
Assign:setter方法将传入参数赋值给实例变量,仅设置变量时,assign适用于基本数据类型,并且是一个弱引用。assign其实也可以用来修饰对象,那么我们为什么不用它修饰对象呢?因为assign修饰的对象(一般编译的时候会产生警告:Assigning retained object to unsafe property;object will be released after assignment)在释放之后,指针的地址还是存在的,也就是说指针并没有被设置为nil,造成野指针。对象一般分配在堆原创 2021-08-27 19:30:19 · 229 阅读 · 0 评论 -
Mac/ios 网络编程 实战
访问网络的方式同步请求:数据的请求在主线程来执行,一旦发送同步请求,程序将停止用户交户,直至服务器返回数据完成,才可以进行下一步操作,而网络数据加载需要一个时间过程,这样的话就会阻塞主线程。异步请求:数据的请求过程在多线程执行。其他区别:同步请求无法取消,异步请求过程中可以奇效,同步请假无法监听加载进度,异步可以监听主要区别方式:GET请求:将参数直接写在访问路径上,操作简单,但是容易被外界看到,安全性不高,而且有长度限制,地址最多255字节POST请求:将参数放到body里面。POST请求操作原创 2021-08-12 10:32:36 · 401 阅读 · 0 评论 -
@synchronized使用和深入分析
@synchronized 结构所做的事情跟锁(Lock)类似:它防止不同线程同事执行同一段代码。但在某些情况下,相比于使用NSLock创建锁对象、加锁和解锁来说,@synchronized用着更方便,可读性更高。下面用一个线程安全的队列作为例子:@implementation ThreadSafeQueue { NSMutableArray *_elements; NSLock *_lock;}- (instancetype)init { self = [super init];原创 2021-07-27 16:15:34 · 324 阅读 · 0 评论 -
打开AppStore中指定App页面教程
// 如何使用代码打开AppStore中的App呢? 首先你要知道目标App在AppStore中的url,一般是macappstore://itunes.apple.com/app/idxxxxx(xxxx是你的AppId)// 然后像打开其他目录那样打开就可以了[[NSWorkspace shareWorkspace] openURL:[NSURL URLWithString:@"macappstore://itunes.apple.com/app/idxxxxx"]];...原创 2021-07-05 20:45:07 · 724 阅读 · 0 评论 -
从AppStore获取App信息教程
从AppStore获取App信息使用的是https协议获取app在 App Store上的json信息url国外:https://itunes.apple.com/lookup?id=xxx国内:https://itunes.apple.com/cn/lookup?id=xxx首先讲下获取版本信息不准情况:用GET请求,就会出现信息不准,解决办法就是用POST请求。国外和国内地址都请求一遍,获取两个json数据就是在appStore显示的数据NSMutableURLRequest *request原创 2021-07-05 20:35:09 · 1583 阅读 · 0 评论 -
OC简单实现单例模式
OC的封装使得开发者使用一些简单的设计模式十分便捷,今天我们就来学习一下使用单例模式。+ (Class *)sharedInstance { static Class *instance = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instance = [[Class alloc] init]; }); return instance;}...原创 2021-07-05 20:23:28 · 272 阅读 · 0 评论 -
dispatch_semaphore 使用
dispatch_semaphore_t signal;signal = dispatch_semaphore_create(1);__block long x = 0;NSLog(@"0_x:%ld" ,x);dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^ { sleep(1); NSLog(@"waiting"); x = dispatch_semaphore_原创 2021-05-28 17:08:35 · 167 阅读 · 0 评论 -
OC和C语言互相调用
注意事项:OC与C++对象在内存管理上是不一样的。所以我们无法直接将一个OC对象直接赋值给一个C++对象,或者相反。OC与C++都支持指针,可以通过指针进行桥接。例如在一个C++类中声名一个OC的指针。clang可以通过程序文件的后缀名选择不同的编译器对其进行编译。如文件后缀名是.m,它会使用OC编译器;如果是.mm,它会使用Object-C++编译器。OC调用C语言:// 方法一:c语言可以直接在OC的类中写方法:- (void)playvideobtn{ // 调用c语言方法:原创 2021-04-22 17:00:40 · 1309 阅读 · 0 评论 -
OC多线程理解和使用(一)
随着计算机/移动设备不断发展,提供了越来越强大的计算能力和资源,从硬件层面来看首先是CPU芯片集成度越来越高,提供更快的处理能力;其次是多核化多CPU发展;最后剥离一些图片动画渲染等独立的协处理器处理,硬件的提升促进了操作系统软件OS的不断进化,更好的利用硬件能力和资源。提高系统的性能,多线程多任务处理就是最为关键的技术。线程分为主线程和后台线程两种:一个应用只有唯一的一个主线程,其他线程都是后台线程。主线程主要负责UI界面更新和响应用户事件。OSX系统提供了多种线程编程相关技术,我们主要讨论NSThr原创 2021-04-14 11:03:46 · 713 阅读 · 0 评论 -
NSSet理解 和简单应用
NSSet:集合是NSObject的子类,跟NSArray的不一样在于,NSArray中的元素是有序的,可以通过索引访问,而NSSet中的元素是无序的,不能通过索引访问;NSArray中的元素可以是重复的,而NSSet中的元素不能重复,同一个元素只能有一个。NSMutableSet:可变几何是NSSet中的子类,跟NSSet中不一样的地方在于NSMutableSet的元素是可以修改的,可以增加删除替换等操作。NSOderedSet:有序集合是NSObject中的子类,跟NSSet中不一样的地方在于,它的原创 2021-04-12 17:28:57 · 267 阅读 · 0 评论 -
OC中延迟执行代码的一些方法
// 第一种 定制了演示执行的任务,不会阻塞线程,在主线程和自线程中都可以,效率较高(推荐使用)此方式在可以在参数中选择执行的线程。 是一种非阻塞的执行方式, 没有找到取消执行的方法。dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 *NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ });// 第二种 不会阻塞线程 animations block 中的代码对于是支持animati原创 2021-03-30 19:40:58 · 762 阅读 · 0 评论 -
NSMenuItem的坑点
NSMenuItem设置了target之后,在响应菜单的action时从target中寻找如果没有设置target,则从menu中寻找原创 2021-03-26 20:29:10 · 369 阅读 · 0 评论 -
OC 内存管理 ARC 分析和注意的地方
什么是内存管理?程序在运行的过程中通常通过以下行为,来增加程序的内存占用:1.创建一个OC对象2.定义一个变量3.调用一个函数或者方法而一个设备的内存是有限的,每个软件所能占用的内存也是有限的当程序苏占用的内存见多时,系统就会发出内存警告,这时就得回收一些不需要再使用的内存空间。比如回收一些不需要使用的对象,变量等如果程序占用内存过大,系统可能会强制关闭程序,造成程序崩溃、闪退现象,影响用户体验所以,我们需要对内存进行合理的分配内存、清除内存,回收那些不需要再使用的对象,从而保证程序的稳定性原创 2021-03-22 14:48:45 · 229 阅读 · 0 评论 -
frmae和bounds的简单理解
frame:该view在父view坐标系统中的位置和大小(参照点事父亲的坐标系统)bounds:该view在本地坐标系统中的位置和大小(参照点事本地的坐标系统,大多数是自己的坐标系统,以0,0为起点)。原创 2021-02-07 14:25:00 · 217 阅读 · 0 评论 -
draw Image 的两种方式
draw Image 的两种方式:- (NSImage *)getImage { NSImage *image = [[NSImage alloc] initWithSize:NSMakeSize(20, 20)]; [image lockFocus]; [[NSGraphicsContext currentContext] setImageInterpolation:NSImageInterpolationHigh]; NSBezierPath *path = [NSBezierPath原创 2021-02-07 10:47:44 · 768 阅读 · 1 评论 -
Mac os 多线程
多线程的原理:同一时间,CPU只能处理1条线程,只有1条线程在工作(执行)多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换)如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象如果线程特别多,会发生什么情况?1.CPU在N多线程之间调度,CPU会累死,消耗大量的CPU资源2.每条线程被调度执行的频次会降低(线程的执行效率降低)多线程的优缺点:能适当提高程序的执行效率能适当的提高资源利用率(CPU、内存利用率)多线程的缺点:创建线程是有开销的,ios下主要包括以原创 2021-01-20 20:25:09 · 1622 阅读 · 0 评论 -
NSTextFiled 监听输入框,限制输入实例
监听label//. 协议<NSTextFiledDelegate>- (void)controlTextDidChange:(NSNotification *)obj { NSTextField *textFiled = obj.object; int maxLimit = 16; if ([[textFiled stringValue] length] > maxLimit) { [textFiled setStringValue:[[tex原创 2021-01-15 16:58:42 · 623 阅读 · 0 评论 -
获取当前系统使用的语言 OC
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSArray *languages = [defaults objectForKey:@"AppleLanguages"];原创 2021-01-14 19:35:23 · 634 阅读 · 0 评论