- 博客(25)
- 收藏
- 关注
原创 isKindOfClass和isMemberOfClass
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例//定义@interface Person : NSObject{}@interface Dog : NSObject{}@interface VIP : Person{}//初...
2018-12-13 17:53:32
252
原创 iOS 内存泄漏
我们都知道只要发生循环引用,就在造成内存泄漏,但导致内存泄漏还有很多种情况,且听我述来文章目录1.block的循环引用1.1 手写的block1.2第三方库的block1.2.1 AFN的AFHTTPSessionManager1.2.2 MJRefresh内需使用weakself2.delegate的循环引用3.非OC对象的内存泄漏4.NSTimer1.block的循环引用1.1 手写的b...
2018-12-07 11:33:56
625
原创 BLOCK的探索
本文不介绍block基本概念,而主要介绍block捕获自动变量原理和__block原理Block 捕获自动变量自动变量,即是局部变量,C语言中变量一般可以分为一下5种:自动变量函数参数静态变量静态全局变量全局变量我们来看一下下面这段代码:int val = 10;MyBlock block = ^ { NSLog(@"%d&am
2018-12-05 12:29:28
245
原创 UIView兼容阴影和圆角
由于设置阴影需要masksToBounds设置为NO,而设置圆角需要masksToBounds为YES,因此相互矛盾,不能用一般法解决。设原来要显示的view为exhibitView1.需要将当前要展示的UIView加在一个新的UIView,暂且叫做shadowView,将其设置阴影 初始化- (UIView *)shadowView{ if (_shadowViewForH...
2018-08-15 11:31:58
2168
转载 iOS系统库头文件中的宏
NS_AVAILABLE_IOS(5_0) 这个方法可以在iOS5.0及以后的版本中使用,如果在比5.0更老的版本中调用这个方法,就会引起崩溃。NS_DEPRECATED_IOS(2_0, 6_0) 这个宏中有两个版本号。前面一个表明了这个方法被引入时的iOS版本,后面一个表明它被废弃时的iOS版本。被废弃并不是指这个方法就不存在了,只是意味着我们应当开始考虑将相关代码迁移到新的API上...
2018-08-07 11:07:49
812
原创 自定义UIView踩过的坑
1.要重写UIView的initWithFrame:方法而不是init方法当初始化时重写了init方法,而调用了initWithFrame初始化UIView就是无用的。 当初始化时重写了initWithFrame方法,无论调用init还是initWithFrame都没有问题。 因为init方法会饮食的调用initWithFrame方法2.tableView的自定义cell初始化方法中不...
2018-08-04 16:51:16
640
原创 @try @catch @finally
@try { ... 逻辑处理 ...执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容}@catch { ... 异常捕捉 ...除非try里面执行代码发生了异常,否则这里的代码不会执行}@finally{ ... 逻辑执行结果 ...不管什么情况都会执行,包括try catch 里面用了return ,可以...
2018-08-04 08:30:23
990
原创 iOS 懒加载
所谓懒加载,就是用的时候才会加载,在某些情况下可以节省资源。- (UILabel *)nameLabel{ if (!_nameLabel) { _nameLabel = [[UILabel alloc]init]; [self.contentView addSubview: _nameLabel]; } return _nameLab...
2018-08-03 21:49:14
632
转载 UIViewController生命周期
1.initWithNibName:bundle: 初始化UIViewController,执行关键数据初始化操作,非StoryBoard创建UIViewController都会调用这个方法。 * 注意: 不要在这里做View相关操作,View在loadView方法中才初始化。*2 .initWithCoder: 如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIVie...
2018-08-01 11:00:39
640
原创 内存管理的思考方式,ARC中weak、strong的区别,循环引用
1.内存管理的思考方式第一个例子 “自己生成并持有对象”id obj = [[NSObject alloc]init];//(自己生成并持有对象) NSObject类生成的对象A(假如叫做A)被obj持有[obj release];//释放B这里有个定义,用alloc/new/copy/mutableCopy方法生成的对象为自己生成,其他则为非自己生成。第二个例子 “非自己生...
2018-08-01 10:23:01
3114
转载 AppDelegate中各方法的执行顺序
流程图 流程1.程序入口进入main函数,设置AppDelegate为代理int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegat...
2018-07-31 21:00:27
1282
原创 strong、copy,深拷贝、浅拷贝
1.可变用strong的原因2.不可变用copy的原因3.深、浅拷贝4.进一步的探索 文中所引用的对象如下解释,顾名思义,简单易懂master.muStrStrong 指的用strong修饰的可变字符 串 master.muStrCopy 指的用copy修饰的可变字符串 master.strStrong 指的是用strong修饰的不可变字符串 master.st...
2018-07-20 15:26:10
357
原创 windows无法进入的修复方法
1.准备一个U盘,做成wepe的启动盘 2.开机按Esc,选择进入U盘的启动盘 3.打开命令提示符 diskpart sel ids 0 lis par sel par 1 ass letter=m bcd boot E:\windows /s m: /f uefi(假如windows在E盘时)...
2018-07-02 23:07:07
528
转载 fatal: loose object...is corrupt解决方法
错误描述: error: object file .git/objects/9a/83e9c5b3d697d12a2e315e1777ceaf27ea1bab is empty fatal: loose object 9a83e9c5b3d697d12a2e315e1777ceaf27ea1bab (stored in .git/objects/9a/83e9c5b...
2018-07-02 20:32:21
2540
原创 Xcode模拟器录屏
1.进入终端,cd到要放置录屏文件的位置 例如: cd Movies/2.输入命令 xcrun simctl io booted recordVideo filename.mov提示:停止录屏:control + c最后进入到对应文件夹就可以找到录制好的视频了。...
2018-06-28 20:46:32
3527
1
原创 #pragma mark 、#warning
1.#pragma mark当在项目中加入这样的语句时 用#pragma mark -和注释不不同的是可以将整个文件的函数以类似分组的形式展现。当我们点击Xcode 导航栏上面的文件后面的列表时将会得到如图所示的界面: 2.#warning 相当于自定义的警告,用来日后维护和提醒 效果: ...
2018-06-23 17:36:21
257
转载 #ifdef、#ifndef、#if
1、#ifdef(如果被定义) 先看#ifdef的用法:复制代码#define KEY1_PA0#ifdef KEY1_PA0-------------第一段-----------------#define macKEY1_GPIO_CLK RCC_APB2Periph_GPIOA#define ...
2018-06-10 13:07:07
515
转载 Runtime初探
简介runtime可以用来做什么runtime相关头文件和函数一些 Runtime 的术语的数据结构idClassIMPCacheProperty消息方法中的隐藏参数动态方法解析消息转发重定向转发转发和多继承转发与继承健壮的实例变量(Non Fragile ivars)总结简介Runtime 又叫运行时,是一套底层的 C 语...
2018-06-10 12:24:27
200
转载 初探KVO
概述KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则其观察者就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。KVO其实也是“观察者”设计模式的一种应用。这种模式有利于两个类间的解耦合,尤其是对于 业务逻辑与视图控制 这两个功能的解耦合。KVO 的具体实现具体实现代码如下:#import "Vie...
2018-06-07 16:40:07
167
原创 如何安装Windows
第一步(准备工作):第二步(下载镜像):第三步(下载启动盘制作软件):第四步(制作U盘启动盘):第五步(设置UEFI启动):第六步(设置U盘启动):第七步(安装系统):第八步(激活操作系统):(1)密钥激活:(2)批量激活:第九步(后续工作):(1)更新硬件的驱动软件:(2)安装和配置应用软件:注:本教程为通用安装方式第一步(准备工作):准备一个8G以上的U盘(因为系统很大),保证是空的,如果有信...
2018-06-03 17:28:40
615
转载 分类,类别,类扩展
首先,介绍一个简单的概念,分类=类别=Category。 分类(Category):概念: 分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体的指针。可以给某一个类扩充一些方法(不修改原来类的代码),原则上它只能增加方法,不能增加成员(实例)变量。具体原因看源码组成:Category源码: typedef struct objc_category ...
2018-05-27 13:12:11
1063
原创 自定义navigationBar
1)改变返回按钮// 需要在父视图设置backBarButtonItem UIBarButtonItem *backBtnItem = [[UIBarButtonItem alloc] init]; backBtnItem.title = @"消息"; self.navigationItem.backBarButtonItem = backBtnItem;...
2018-05-27 12:50:49
475
原创 Masonry使用的第一天
首先,通过https://github.com/SnapKit/Masonry,点击Clone or download,在弹出的小窗口点击Download Zip,下好之后,打开,将名为“masonry”的文件夹拖入项目,必要时选择Copy items if needed,意思是复制一份。第一步,在头文件中, #import "Masonry.h"完成要设置约束的对象的初始化,当其加入到父视图之后...
2018-05-27 12:23:14
1175
原创 iOS中如何使定时器不受UIScrollView滑动所影响
以下是使用 scheduledTimerWithTimeInterval 方法来实现定时器- (void)addTimer{ NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^{ [self nextImage]; }}该方法会自动为我们实例化的timer添加到当前线程的RunLoop中,并且默认模式...
2018-04-11 22:49:56
1243
原创 为什么要使用补码
首先,介绍一个简单的概念: 1GB = 1024MB = 1024*1024KB = 1024*1024*1024B(Byte) = 1024*1024*1024*8 bits。 在计算机编译器中,当我们定义一个字符型变量a,即 char a ,这时,计算机会分配8个bit给a变量,即是一个字节,所能存储的数字是[0,255],正好对应256个ASCII码,因此也可以得出,一...
2018-03-29 20:45:54
967
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人