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