iOS
文章平均质量分 52
电子小绵羊
这个作者很懒,什么都没留下…
展开
-
初探KVO
概述KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则其观察者就会接受到通知。简单的说就是每次指定的被观察的对象的属性被修改后,KVO就会自动通知相应的观察者了。KVO其实也是“观察者”设计模式的一种应用。这种模式有利于两个类间的解耦合,尤其是对于 业务逻辑与视图控制 这两个功能的解耦合。KVO 的具体实现具体实现代码如下:#import "Vie...转载 2018-06-07 16:40:07 · 140 阅读 · 0 评论 -
自定义UIView踩过的坑
1.要重写UIView的initWithFrame:方法而不是init方法当初始化时重写了init方法,而调用了initWithFrame初始化UIView就是无用的。 当初始化时重写了initWithFrame方法,无论调用init还是initWithFrame都没有问题。 因为init方法会饮食的调用initWithFrame方法2.tableView的自定义cell初始化方法中不...原创 2018-08-04 16:51:16 · 574 阅读 · 0 评论 -
AppDelegate中各方法的执行顺序
流程图 流程1.程序入口进入main函数,设置AppDelegate为代理int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegat...转载 2018-07-31 21:00:27 · 1233 阅读 · 0 评论 -
内存管理的思考方式,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 · 3046 阅读 · 0 评论 -
UIViewController生命周期
1.initWithNibName:bundle: 初始化UIViewController,执行关键数据初始化操作,非StoryBoard创建UIViewController都会调用这个方法。 * 注意: 不要在这里做View相关操作,View在loadView方法中才初始化。*2 .initWithCoder: 如果使用StoryBoard进行视图管理,程序不会直接初始化一个UIVie...转载 2018-08-01 11:00:39 · 602 阅读 · 0 评论 -
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 · 743 阅读 · 0 评论 -
UIView兼容阴影和圆角
由于设置阴影需要masksToBounds设置为NO,而设置圆角需要masksToBounds为YES,因此相互矛盾,不能用一般法解决。设原来要显示的view为exhibitView1.需要将当前要展示的UIView加在一个新的UIView,暂且叫做shadowView,将其设置阴影 初始化- (UIView *)shadowView{ if (_shadowViewForH...原创 2018-08-15 11:31:58 · 2113 阅读 · 0 评论 -
BLOCK的探索
本文不介绍block基本概念,而主要介绍block捕获自动变量原理和__block原理Block 捕获自动变量自动变量,即是局部变量,C语言中变量一般可以分为一下5种:自动变量函数参数静态变量静态全局变量全局变量我们来看一下下面这段代码:int val = 10;MyBlock block = ^ { NSLog(@"%d&am原创 2018-12-05 12:29:28 · 188 阅读 · 0 评论 -
isKindOfClass和isMemberOfClass
-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例//定义@interface Person : NSObject{}@interface Dog : NSObject{}@interface VIP : Person{}//初...原创 2018-12-13 17:53:32 · 197 阅读 · 0 评论 -
@try @catch @finally
@try { ... 逻辑处理 ...执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容}@catch { ... 异常捕捉 ...除非try里面执行代码发生了异常,否则这里的代码不会执行}@finally{ ... 逻辑执行结果 ...不管什么情况都会执行,包括try catch 里面用了return ,可以...原创 2018-08-04 08:30:23 · 919 阅读 · 0 评论 -
iOS 懒加载
所谓懒加载,就是用的时候才会加载,在某些情况下可以节省资源。- (UILabel *)nameLabel{ if (!_nameLabel) { _nameLabel = [[UILabel alloc]init]; [self.contentView addSubview: _nameLabel]; } return _nameLab...原创 2018-08-03 21:49:14 · 590 阅读 · 0 评论 -
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 · 314 阅读 · 0 评论 -
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 · 1126 阅读 · 0 评论 -
iOS中如何使定时器不受UIScrollView滑动所影响
以下是使用 scheduledTimerWithTimeInterval 方法来实现定时器- (void)addTimer{ NSTimer scheduledTimerWithTimeInterval:2.0 repeats:YES block:^{ [self nextImage]; }}该方法会自动为我们实例化的timer添加到当前线程的RunLoop中,并且默认模式...原创 2018-04-11 22:49:56 · 1191 阅读 · 0 评论 -
分类,类别,类扩展
首先,介绍一个简单的概念,分类=类别=Category。 分类(Category):概念: 分类(Category)是OC中的特有语法,它是表示一个指向分类的结构体的指针。可以给某一个类扩充一些方法(不修改原来类的代码),原则上它只能增加方法,不能增加成员(实例)变量。具体原因看源码组成:Category源码: typedef struct objc_category ...转载 2018-05-27 13:12:11 · 995 阅读 · 0 评论 -
自定义navigationBar
1)改变返回按钮// 需要在父视图设置backBarButtonItem UIBarButtonItem *backBtnItem = [[UIBarButtonItem alloc] init]; backBtnItem.title = @"消息"; self.navigationItem.backBarButtonItem = backBtnItem;...原创 2018-05-27 12:50:49 · 416 阅读 · 0 评论 -
#pragma mark 、#warning
1.#pragma mark当在项目中加入这样的语句时 用#pragma mark -和注释不不同的是可以将整个文件的函数以类似分组的形式展现。当我们点击Xcode 导航栏上面的文件后面的列表时将会得到如图所示的界面: 2.#warning 相当于自定义的警告,用来日后维护和提醒 效果: ...原创 2018-06-23 17:36:21 · 215 阅读 · 0 评论 -
Runtime初探
简介runtime可以用来做什么runtime相关头文件和函数一些 Runtime 的术语的数据结构idClassIMPCacheProperty消息方法中的隐藏参数动态方法解析消息转发重定向转发转发和多继承转发与继承健壮的实例变量(Non Fragile ivars)总结简介Runtime 又叫运行时,是一套底层的 C 语...转载 2018-06-10 12:24:27 · 154 阅读 · 0 评论 -
#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 · 469 阅读 · 0 评论 -
Xcode模拟器录屏
1.进入终端,cd到要放置录屏文件的位置 例如: cd Movies/2.输入命令 xcrun simctl io booted recordVideo filename.mov提示:停止录屏:control + c最后进入到对应文件夹就可以找到录制好的视频了。...原创 2018-06-28 20:46:32 · 3416 阅读 · 1 评论 -
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 · 533 阅读 · 0 评论