objective_c
文章平均质量分 93
爱尔兰堤坝
这个作者很懒,什么都没留下…
展开
-
iOS - 分类
背景:Category中虽然可以添加属性,但是不会生成对应的成员变量,也不能生成getter,setter方法。因此,在调用Category中声明的属性时会报错我们可以自己借助关联对象来实现getter和setter方法。关联对象能够帮助我们在运行时阶段将任意的属性关联到一个对象上。具体需要用到以下几个方法:...原创 2021-10-20 17:15:25 · 737 阅读 · 0 评论 -
iOS - UIKit相关知识点
UIView和Layer的区别首先UIView可以响应事件,Layer不可以.UIKit使用UIResponder作为响应对象,来响应系统传递过来的事件并进行处理。在 UIResponder中定义了处理各种事件和事件传递的接口。UIApplication、UIViewController、UIView、和所有从UIView派生出来的UIKit类(包括UIWindow)都直接或间接地继承自UIResponder类。CALayer直接继承 NSObject,并没有相应的处理事件的接口。两者最明显的区原创 2021-08-19 21:36:49 · 295 阅读 · 0 评论 -
iOS - autoreleasePool
文章目录AutoreleasePool引入AutoreleasePoolPage的结构实现AutoreleasePoolPage结构POOL_BOUNDARY(哨兵对象)AutoreleasePool流程objc_autoreleasePoolPush方法autoreleaseFast参数objc_autoreleasePoolPop方法你以为我会说啥,想啥呢,二叉树的三种非递归遍历方式,掌握了吗!!!!每次写些烂怂代码还不好好看看模板AutoreleasePool引入我们看一下objc_autore原创 2021-08-17 10:11:27 · 282 阅读 · 0 评论 -
iOS - NSOperation、NSOperationQueue、pthread、NSThread随记
随便记记????NSOperation、NSOperationQueue 简介NSOperation、NSOperationQueue 是苹果提供给我们的一套多线程解决方案。实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。既然是基于 GCD 的更高一层的封装。在 NSOperation、NSOperationQueue 中也有类似的任务(操作)和队列(操作队列)的概念。操作(Operati原创 2021-08-10 19:49:39 · 127 阅读 · 0 评论 -
iOS - GCD多线程
iOS中常见的多线程方案GCD的常用函数同步并发队列( 必须是异步)异步才会显示相互显示出来是并发的如果是同步的即便是并发也显示不出来串行队列异步执行即在子线程串行执行串行队列同步执行,线程改变在主线程dispatch_sync和dispatch_async用来控制是否要开启新的线程队列的类型,决定了任务的执行方式(并行,串行,主队列(也是串行队列的一种))两者之间互相联系却又没有没有直接影响特殊情况:主队列那么多虽然是异步,也是在主线程执行的总原创 2021-08-10 14:43:50 · 292 阅读 · 0 评论 -
iOS - 通知 代理 KVO Block
文章目录NSNotification 通知delegate代理blockKVO对比KVO和NSNotification的对比delegate和NSNotification对比block和delegate对比观察者模式代理模式NSNotification 通知基本流程:controller使用name发送通知,持有与之相同name的另一方接收通知并进行处理(如果添加的观察者name为空,那么就会接收所有通知)。NSNotification是iOS中一个调度消息通知的类,属于观察者模式的一种,在程序中原创 2021-08-05 19:59:58 · 301 阅读 · 0 评论 -
iOS - 持久化
文章目录数据持久化沙盒持久化方式属性列表偏好设置归档遵守NSCoding协议CoreData和SQL数据持久化数据持久化就是将数据保存到硬盘中,使得在应用程序或及其重启后可以继续访问之前保存的数据,既可以减少用户流量消耗,也可以增强app的体验效果沙盒沙盒:iOS系统为每个应用程序创建的存储空间,且每个应用程序只能访问自身的存储空间不能互相通信,所有的非代码文件都要保存在此,例如属性文件plist,文本文件,图像,图标,媒体资源等。沙盒目录下的文件及文件夹结构分析:应用程序包(hq):包含原创 2021-08-05 16:09:10 · 364 阅读 · 0 评论 -
iOS - 单例模式
文章目录介绍单例单例的优缺点单例的优点单例的缺点单例的实现单例的实现方式线程安全的懒汉实现内部静态变量的懒汉实现(静态指针方式,单线程模式单例)加锁的经典懒汉实现(多线程加锁单例)通过@synchronized加锁的多线程单例GCD多线程方式实现单例!!!!(官方推荐)饿汉模式关于复写关于allocWithZone:关于其他参考文章介绍单例单例模式是比较常见的一种设计模式,目的是保证一个类在运行期间有且只有一个实例,而且自行实例化并向整个系统提供这个实例,一直保存在内存中,到程序退出时由系统自动释放这原创 2021-08-04 19:20:15 · 259 阅读 · 0 评论 -
iOS - KVC
文章目录KVC 简介KVC获取值的过程(valueForKey:的原理)KVC取值的过程(valueForKey:的原理)KVC 简介KVC的全称是Key-Value Coding,俗称“键值编码”,可以通过一个Key来访问某个属性常见的API有- (void)setValue:(id)value forKeyPath:(nonnull NSString *)keyPath;- (void)setValue:(id)value forKey:(nonnull NSString *)key;-原创 2021-08-03 15:33:10 · 177 阅读 · 0 评论 -
iOS - KVO底层原理分析
文章目录简单复习一下KVO注册观察者观察者发生变化时会调的方法移除观察者小demoKVO的本质person1的isa指向改变,指向NSKVONotifying_MJPerson类关于NSKVONotifying_MJPerson类注总结KVO全称:Key-Value Observing, 俗称“健值监听”,可以用于监听某个对象属性值的改变简单复习一下KVO注册观察者addObserver:forKeyPath:options:context参数含义:observer:观察者,监听属性变化的对原创 2021-08-02 22:16:59 · 205 阅读 · 0 评论 -
iOS - Block简单解析
文章目录blocks简介block语法Block类型变量Block的本质Block截获变量对局部变量(auto)的截获blocks简介Blocks是C语言的扩充功能:带有自动变量(局部变量)的匿名函数匿名函数就是不带名称的函数,在C语言中不允许这种函数存在。在C语言中为了调用函数,必须使用该函数的名称,即使使用函数指针来直接调用函数,虽然似乎不用知道函数名也能够使用该函数,但是其实只是似乎,其实还是需要的,所以就是说在C语言中,不能使用匿名函数这种不带名称的函数但是当我们有了Blocks,源代码中就原创 2021-08-01 18:05:26 · 285 阅读 · 0 评论 -
iOS - 属性关键字
文章目录属性@property/@synthesize/@dynamic语法属性关键字属性关键字之原子类属性关键字之读写权限属性关键字之引用计数深浅复制属性属性:是OC的一项特性,用于封装对象中的数据。iOS中通常用@property的形式来声明属性,一般为我们认为属性 = setter+ getter + 实例变量其实@property是一种语法糖,编译器会自动为你的实例变量生成setter和getter方法。你在获取这个属性值(NSLog(@"%@",self.name);)和设置属性值(se原创 2021-07-30 22:04:08 · 247 阅读 · 0 评论 -
iOS - 关于ARC的一些补充
文章目录ARC 规则1. 不能使用retain/release/retainCount/autorelease2. 不能使用NSAllocateObject/NSDeallocateObject3. 须遵守内存管理的方法命名规则4. 不要显式调用dealloc5. 使用@autoreleasepool块代替NSAutoreleasePool6. 不能使用区域(NSZone)7. 对象型变量不能作为C语言结构体的成员8. 显式转换id和void*属性ARC实现__strong修饰符__weak修饰符__aut原创 2021-07-25 15:53:37 · 176 阅读 · 1 评论 -
iOS-对象的底层结构和继承者链
文章目录OC本质底层实现转化对象的本质OC对象的分类OC本质底层实现转化OC本质底层实现转化其实都是C/C++代码那么如何转化为C/C++代码打开终端$ cd 文件所在的路径$ xcrun -sdk iphoneos clang -arch a m64 -rewrite-objc -fobjc-arc -fobjc-runtime=ios-8.0.0 main.m -o main-arm64.cpp此时就会生成对应的C++文件对象的本质对象类的本质是结构体@interface原创 2021-07-25 11:14:57 · 258 阅读 · 4 评论 -
iOS - 消息传递和消息转发机制
文章目录消息转发机制的前置条件消息转发机制1. 动态方法解析2. 备援接收者3. 完整的消息转发消息转发机制的前置条件首先要理解消息传递的概念在OC中,方法的调用可以理解为对象接收消息,在这一过程中,采用动态绑定机制,即具体调用哪个方法要等到运行时才能确定并执行。那么首先给对象发送消息void returnValue = [someObject messageName:parameter];语句发送消息后,编译器都会将其转化成对应的一条objc_msgSend C语言消息发送void obj原创 2021-07-18 20:41:26 · 526 阅读 · 1 评论 -
iOS - 记录零碎问题
文章目录一. 记录一直出现的'BaiduMapAPI_Base/BMKLocationComponent.h' file not found二. 考勤请假页面的传值问题四. UIPickView的使用五. 链接后台接口所用的第三方库六. MJRefresh框架七. iOS---textfield设置为只有下划线八. 加载view出现的问题九. 注意初始化的问题十. Masonry不会写了,时间太长忘记了,复习一下十一.取消分隔线十二. Git的 M,T, D等标志十三. textField左边栏加图标并留原创 2021-06-01 23:52:22 · 455 阅读 · 3 评论 -
iOS - ARC简单学习
一. 引言1.1 概要ARC,全称叫Automatic Reference Counting。就像自动引用计数,ARC只是自动地帮我们处理“引用计数”的相关部分。在编译单位上,可设置ARC有效或无效,Xcode4.2默认设定为对所有文件ARC有效1.2 学习ARC之前要了解的基础知识引用计数(也就是内存管理)基础每个OC对象都拥有自己的引用计数器,是一个整数,可以理解为对象此时被引用的次数也可以理解为有多少人正在使用此对象,一个对象被创建默认引用计数为1.可能引起的四种变化自己原创 2021-04-18 14:08:31 · 525 阅读 · 0 评论 -
iOS - WMPageController的使用
一 效果图二 使用方法步骤1. 通过cocoapods引入WMPageController到项目中platform:ios, '7.0'target 'ViewPage ceshi' dopod 'WMPageController'end2.建立文件继承自WMPageController代码#import "WMPageController.h"typedef NS_ENUM(NSUInteger, WMMenuViewPosition) { WMMenuViewPosi原创 2021-02-21 20:07:54 · 1780 阅读 · 4 评论 -
Effective Objective-C 2.0阅读笔记
第六条:理解“属性”这一概念在对象接口的定义中,就可以使用属性,这是一种标准的写法,能够访问封装在对象里的数据属性的优势如果使用了属性的话,那么编译器就会自动编写访问这些属性所需的方法,此过程叫做“自动合成”编译器还会自动向类中添加适当类型的实例变量(可以使用@synthesize语法来指定实例变量的名字)可以使用@dynamic关键字,编译器就不会为上面这个类自动合成存取方法或实例变量。@interface EOCPerson : NSObject@property (nonato原创 2021-01-30 13:39:32 · 249 阅读 · 2 评论 -
知乎日报问题汇总
知乎问题汇总在ViewController里初始化View,并且调用View里的内容 _homeView = [[HomeView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)]; [_homeView viewInit]; _homeView.tableView.delegate = self; _homeView.tableVi原创 2020-11-09 13:12:30 · 118 阅读 · 0 评论 -
iOS - 判断对象相等,重写isEqual,hash
一. ==通常我们会用 == 来判断两个对象是否相等,但是这样比较出来的结果可能不是我们期望的,那么 == 究竟比较的是什么对于基本类型==比较的是值对于对象类型,==比较的是对象的地址,即是否为同一个对象 NSString *s1 = @"123"; NSString *s2 = [NSString stringWithFormat:@"%d", 123]; BOOL e1 = s1 == s2; BOOL e2 = [s1 isEqual:s2];原创 2020-10-21 21:22:03 · 1096 阅读 · 0 评论 -
iOS -Manager封装一个网络请求和JSONModel的使用
一.Manager类的使用1. 创建一个Manager类@implementation Managerstatic Manager *manager = nil;+ (instancetype) sharedManger { if(!manager) { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ manager = [Manager new]原创 2020-10-18 22:35:53 · 241 阅读 · 0 评论 -
iOS - present和push
一.定义区别pushViewController 导航栏控制器入栈的方式切换页面(只能逐级返回)presentViewController模式切换的方式切换页面(可以返回任意一层)二. 返回方法push和pop对应用UINavigationController的时候用pushViewController:animated返回之前的视图[[self navigationController] popViewControllerAnimated:YES]; push以后会在navigation的原创 2020-09-28 23:03:59 · 767 阅读 · 0 评论 -
iOS - ViewController的生命周期
一 生命周期图UIViewController生命周期介绍通过alloc init 分配内存,初始化controller.在init里应该只有相关数据的初始化,而且这些数据都是比较关键的数据。init里不要掉self.view,否则会导致viewcontroller创建view。loadview中这个方法中,要正式加载View.(是一个方法)负责创建UIViewController的view ,如果我们没有重载这个方法。它会调用[super loadView];返回一个View .一般用于创原创 2020-09-25 21:51:52 · 137 阅读 · 0 评论 -
iOS - MVC架构
文章目录MVC简介MVC模式Control->Model/ViewModel->ControlView->Controller简单登陆的demoModel:ViewControlMVC简介MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。MVC旨在让Model和View不直接通信,而是通过Controller通信,从而达到解耦的目的。简单来说MVC模式能够完成各司其职的任务模式,由于降低了各个环节的原创 2020-09-20 21:10:23 · 225 阅读 · 0 评论 -
iOS - Masonry
Masonry就是为屏幕适配而生的三方框架.我的理解是Masonry来进行布局可以使视图在不同的模拟机上的位置基本保持相同,使用Masonry要先配置CocoaPods。基本知识点mas_makeConstraints() 添加约束mas_remakeConstraints() 移除之前的约束,重新添加新的约束mas_updateConstraints() 更新约束,写哪条更新哪条,其他约束不变实例演示设置内边距equalTomas_equalTooffset这三种方原创 2020-09-13 18:57:58 · 328 阅读 · 0 评论 -
iOS - 网络求值URLSession协议传值
这周写天气预报用到了网络求值,我用的是URLSession协议传值总的来说就5步创建请求地址创建请求类创建会话根据会话创建任务启动任务以及它所带的一些方法下面是URLSession协议传值模版#define LIST_URL @"https://geoapi.heweather.net/v2/city/lookup?location=beijing&key=b92646e0f4194731b50870798cfad1d0"- (void) touchesBegan:(NSS原创 2020-08-09 22:23:30 · 211 阅读 · 0 评论 -
iOS - 属性传值和协议传值
一 属性传值(正传)把第一个页面的内容传到第二个页面第一个页面FirstViewController.h@property UITextField *accounttextField;FirstController.m- (void) press { SecondViewController *SecondViewController = [SecondViewController alloc]init]; registerViewController.str = _accounttextF原创 2020-08-02 21:39:47 · 162 阅读 · 0 评论 -
iOS - TableView自定义cell的几种形式
应用背景:当所写的几个cell版式几乎一样的时候,用自定义cell比较好。步骤:在UIViewController里 定义tableView,(记得注册)然后在底下协议中定义几个数组,将每个cell的文字和图片的名称写进去在UITableViewCell里,分别定义cell中都会出现的文字按钮或者图片,然后就好了UIViewController.m文件里self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0,原创 2020-07-27 08:07:27 · 577 阅读 · 0 评论 -
OC - 第六章笔记摘要
6.1包装类NSInteger: 大致等于longNSUInteger:大致等于unsigned long型整数CGFLoat:在64位平台上大致相当于double,在32位平台上大致相当于float。他们并不是包装类,它们只是基本类型NSValue和NSNumber都是包装类NSValue是NSNumber的父类,代表一个更通用的包装类,包装单个short, int, long, float, char, 指针,对象id等数据项NSNumber是更具体的包装类用于包装C语言的各种数值类型原创 2020-06-28 08:02:34 · 106 阅读 · 0 评论 -
OC - 封装,继承,多态三大特性
文章目录封装继承多态类有三大特性:继承,封装,多态。让我们来看一下这三大特性封装封装就是对类中的一些字段,方法进行保护,不被外界所访问到,有一种权限的控制功能对一个累或对象实现良好封装,可以实现以下目的:隐藏类的实现细节让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里加入逻辑控制,限制对成员变量的不合理访问。可进行数据检查,从而有利于保证对象信息的完整性便于修改,提高代码的可维护性封装实际上有两方面的含义,把该隐藏的隐藏起来,把该暴露的暴露出来。通过使用访问控制符来实现:原创 2020-06-21 08:46:16 · 252 阅读 · 0 评论 -
OC - 入门基础知识,类与对象
1.@符号在OC中,绝大部分关键字由@开头@interface @implementation @end@public @protected @private @selector@try @catch @throw @required @class字符串的定义要添加@,即@“字符串” NSString *name = @"姓名";2.NSlog输出在OC中用到的打印函数是NSlog,相当于printfNSLog(@"Hello world");原创 2020-06-14 01:41:26 · 332 阅读 · 0 评论