iOS
文章平均质量分 67
洋洋dev
别在机场等一艘船
展开
-
指针的偏移
指针偏移指针运算符&和*是两种指针运算符&是取地址运算符 具有取出内存地址的功能*是间接寻址运算符 可以取出指定的内存地址上的值代码 /* * 间接寻址运算符 & 取地址符运算符 */- (void)test { int a = 1; int *b = &a; int c = *b;}1、变量a:1,变量a地址:0x7ffeeb6be17c2、定义一个int *类型的指针变量b 3、指针变量b指向的a的值:1基原创 2021-12-19 13:41:10 · 1524 阅读 · 0 评论 -
类中的 @property @synthesize @dynamic
@interface Person : NSObject@property(nonatomic, strong) NSString *age;- (void)test;@end@implementation Person- (void)test { // 调用setter方法 self.age = @"5"; // 调用getter方法 NSLog(@"%@",self.age);}@end调用- (void)viewDidLoad { [super原创 2021-12-19 13:33:14 · 438 阅读 · 0 评论 -
weak源码分析流程图
前言本篇weak源码分析流程图,用来辅助理解weak源码。storeWeakweak_unregister_no_lockweak_entry_for_referentremove_referrerweak_entry_removeweak_entry_insertweak_register_no_lockappend_referrergrow_refs_and_insertweak_grow_maybeweak_resize...原创 2021-12-19 13:31:05 · 207 阅读 · 0 评论 -
weak实现原理
weak 实现原理下面的一段代码是我们在开发中常见的weak的使用- (void)viewDidLoad { [super viewDidLoad]; NSObject *obj = [[NSObject alloc] init]; __weak NSObject *weakp = obj;}汇编runtime调用objc_initWeakobjc_initWeak(&weakp, obj);objc_initWeak源码id objc_initWea原创 2021-12-19 13:30:31 · 1247 阅读 · 0 评论 -
block的循环引用
前言block的循环引用Q: 为什么 block 会产生循环引用?相互循环引用:如果当前block对当前对象的某一成员变量进行捕获的话,可能会对它产生强引用。根据block的变量捕获机制,如果block被拷贝到堆上,且捕获的是对象类型的auto变量,则会连同其所有权修饰符一起捕获,所以如果对象是__strong修饰,则block会对它产生强引用(如果block在栈上就不会强引用)。而当前block可能又由于当前对象对其有一个强引用,就产生了相互循环引用的问题;总结必须同时满足2个条件1、 b原创 2021-12-11 11:50:42 · 3194 阅读 · 0 评论 -
block的内存管理
对比对象类型 生成的block变量结构体struct __Block_byref_obj2_1 { void *__isa;__Block_byref_obj2_1 *__forwarding; int __flags; int __size; void (*__Block_byref_id_object_copy)(void*, void*); void (*__Block_byref_id_object_dispose)(void*); NSObject *__strong obj2;原创 2021-12-07 18:07:27 · 610 阅读 · 0 评论 -
介绍一个blocks工具包BlocksKit
介绍一个blocks工具包BlocksKit BlocksKit 是一个开源的与Cocoa紧密集合的基础性框架,BlocksKit并没有创建新的宏,函数,方法和类,只是对Cocoa类的一个扩展,是一个blocks的大杂碎,也是Zachary Waldowski集思广益精炼得来的,说白了它就是利用blocks的优势,给Cocoa类增加了一系列实用方法,比如让NSObject原创 2015-05-21 16:54:49 · 1048 阅读 · 0 评论 -
仿iOS原生弹出视图效果的 HUD的弹出动画
弹出视图动画HUD的弹出/** 弹出视图的动画 */- (void)popupAnimation:(UIView *)outView duration:(CFTimeInterval)duration{ CAKeyframeAnimation * animation = [CAKeyframeAnimation animationWithK原创 2014-11-21 17:11:45 · 2468 阅读 · 0 评论 -
CAKeyframeAnimation 关键帧动画
之所以叫做关键帧动画是因为,这个类可以实现,某一属性按照一串的数值进行动画,就好像制作动画的时候一帧一帧的制作一样。一般使用的时候 首先通过 animationWithKeyPath 方法创建一个CAKeyframeAnimation实例, CAKeyframeAnimation 的一些比较重要的属性1. path这是一个 CGPathRef 对象,原创 2014-11-21 16:28:08 · 737 阅读 · 0 评论 -
iOS 中关于Copy的疑问汇总
疑问清单:小编近几年的开发过程中,自己或同事遇到过一些关于Copy的疑问,现收集汇总下来。也欢迎大家提出自己的疑惑,小编后续一起补上。一、疑问代码// 有的人用 strong 有的用copy@interface ViewController ()@property (nonatomic, strong) NSString *str;@end// 深浅Copy 啥区别,下面代码是深了还是浅了 ?原创 2017-03-17 11:50:46 · 970 阅读 · 0 评论 -
OC中的copy
前言不敢说覆盖OC中所有copy的知识点,但最起码是目前最全的最新的一篇关于 copy的技术文档了。后续发现有新的copy 知识点,我会第一时间更新到这篇博客内。先提供一下完整的代码链接 下载完整代码 OC_Copy 后续博客中会用到。本篇博客内容结构图:喜欢跳跃阅读的同学,可以展开 “前言” 上面的 “目录” ,进行选择性阅读NSObjct对象赋值操作在内存中的表现将这部分拿到开篇来说,是因原创 2017-03-16 20:12:44 · 1333 阅读 · 0 评论 -
UIView+PlaceholderView介绍
经常需要处理这种占位图业务 (无网 UFO 无数据 NoData) UIView+PlaceholderView 尝试用一行代码更优雅的去处理列表中的占位图业务问题 UIView+PlaceholderView 可以提供给你 1、 使用链式语法,一行代码创建完成 2、采用 ph. 命名空间,比如 RxSwift 的 rx.,SnapKit 的 snp. ...原创 2018-02-12 18:52:34 · 1204 阅读 · 0 评论 -
CocoaPods Guides : pod install vs pod update
简介许多人开始使用CocoaPods时候都认为:pod install 仅在首次用CocoaPods建立工程的时候使用,之后更新使用pod update,但事实并非如此。本文目的是解释什么时候使用pod install 和 pod update 简而言之使用pod install来安装新的库,即使你的工程中已经有了 Podfile文件 并且已经执行过pod install命令,但...原创 2018-09-05 16:48:59 · 351 阅读 · 0 评论 -
视图抖动动画
视图抖动动画视图抖动动画?123456789101112131415// 视图抖动动画+ (void)shakeView:(UIView*)view duration:(CGFloat)fDuration{原创 2014-11-21 17:16:02 · 577 阅读 · 0 评论 -
iOS 中常用的动画效果
最近工作中刚好用到过其中的某些动画,所以在网上搜了下资料,了解了下这些动画。这里就自己的理解做一下总结,如有错误或遗漏,尽请谅解。原创 2014-04-25 11:51:57 · 1083 阅读 · 0 评论 -
LLDB调试命令(三)thread return 命令 帮你排除项目中的疑难杂症
Debug 阶段,有时候我们因为某些原因,不想让代码执行某个方法,或者想直接返回一个想要的值,这个时候 可以使用 thread return 例如我们 有一个 isRunning 的方法默认情况下返回的是YES我们想观察它返回NO的情况,我们只需要在这个方法的开始位置 加一个断点,当程序中断的时候, 在LLDB控制台输入 thread return NO原创 2016-06-02 17:36:36 · 2509 阅读 · 0 评论 -
Objective-C 代码规范(Code Style)(三)
Xcode支持自动缩进和缩进纠正,我们只要选中需要格式化的代码,然后点击 Control + i。XCode 会自动帮我们把代码缩进弄好。不过在平时编写的时候也要注意,良好的缩进是可读性很重要的一部分,因为他能标示出哪些代码使数以一个整体的。避免多个返回不好的写法:这样的写法,会导致一个函数中有多个返回的地方,有些处理,因为逻辑的需要不得不放到最后面做,但是就因为这样的结构忽略掉了。原创 2015-05-25 18:25:34 · 764 阅读 · 0 评论 -
Objective-C 代码规范(Code Style)(二)
成员变量与属性存取器(Accessor)命名原则 这也是让我纠结了挺久,一直不懂为什么很多代码里面类成员变量出现了下划线"_",而属性存取方法@property声明时不加下划线,实现时@synthesize又令两个名字相等。 @interface SunnyTest : NSObject { NSArray * _array; }@property (nonato原创 2015-05-25 18:20:08 · 496 阅读 · 0 评论 -
Objective-C 代码规范(Code Style)(一)
我们写出来的代码会给很多人看,为了使代码清晰简洁,方便阅读理解,都会统一遵从一定的代码规范,Objective-C同样如此。 主要参考规范: 1.Google Objective-C Style Guide 2.Coding Guidelines for Cocoa 简单总结一下目前接触到的: 1.代码行度最大为100列(C++原创 2015-05-25 18:14:30 · 1011 阅读 · 0 评论 -
KVC/KVO入门
导语 KVC/KVO 在iOS设计模式中具有很重要的地位,在平常的优化代码,面试问答等经常会用到,甚至很多高级的iOS开发技巧都是基于KVC实现的,因此,想提高自己的开发能力,不能仅限于掌握一些KVC/KVO 的基础用法,必须对期底层原理知其所以然,逐步的推敲和掌握 ,应用到自己的代码中。目前网上关于KVC/KVO的文章在非常多,小编打算站在巨人的肩膀上,加上自己的一些开发经验和理解,遵循由浅到原创 2016-10-28 15:19:14 · 755 阅读 · 0 评论 -
KVC/KVO 进阶(一) 底层原理
导语 上篇文章介绍了一些KVC/KVO的简单用法,本篇介绍一下KVC/KVO的底层原理。创建 person 和 car 类person.h@class Car;@interface Persion : NSObject{ NSString *_adress;}@property (nonatomic, strong) NSString *name;@property (non原创 2016-10-27 15:32:51 · 2270 阅读 · 0 评论 -
KVC/KVO 进阶(二)KVC方法执行顺序
KVC API KVC以非正式协议的方式出现在 Foundation/NSKeyValueCoding KVC方法执行顺序Persion.m#import "Persion.h"@implementation Persion@synthesize name = _name;- (void)setName:(NSString *)name { NSLog(@"%s",__func__)原创 2016-10-27 18:13:30 · 1044 阅读 · 0 评论 -
KVC/KVO 进阶(三)KVC的验证和异常处理
KVC的验证和异常处理一般情况下,我们都可以正确的使用kvc,但遇到一些复杂的情况,我们无法分辨 key 或者 value 是否合法化 比如: 我们给persion 赋予一个height的属性。运行程序,最终crash ,如何规避掉这种crash。 //perion没有 height属性 [persion setValue:@181 forKeyPath:@"height"];输出结果2016原创 2016-10-28 15:59:05 · 1253 阅读 · 0 评论 -
KVC/KVO 进阶(四)KVC是如何处理异常的
前言 上篇文章大致阐述了KVC在key正确情况下的执行过程,这篇来说说key错误时KVC是如何运行的。正文KVC中最常见的异常就是不小心使用了错误的Key,或者在设值中不小心传递了nil的值,KVC中有专门的方法来处理这些异常。 通常在用KVC操作Model时,抛出异常的那两个方法是需要重写的。虽然一般很小出现传递了错误的Key值这种情况,但是如果不小心出现了,直接抛出异常让APP崩溃显然是原创 2016-10-28 16:36:18 · 607 阅读 · 0 评论 -
GCD的简单用法
原创地址:http://blog.csdn.net/like7xiaoben/article/details/25629365尊重原创,保护原创作者权益,转载请注明出处!GCD的简单用法 /* 创建一个队列用来执行任务,TA属于系统预定义的并行队列即全局队列,目前系统预定义了四个不同运行优先级的全局队列,我们可以通过dispatch_get_global_q转载 2014-12-01 17:45:05 · 514 阅读 · 0 评论 -
MAC下SVN 的使用
MAC 下SVN的使用 (菜鸟级别的学习文档,高手请绕行)原创 2014-04-22 19:59:51 · 752 阅读 · 0 评论 -
LLDB调试命令(一) p 和 po 命名行的鼻祖 expression 命令
expression 命令是执行一个表达式,并将表达式返回的结果输出,是LLDB调试命令中最重要的命令,也是我们常用的 p 和 po 命令的 鼻祖。他主要有2个功能》》执行表达式举例:改变视图背景颜色(无需改变代码)》》输出返回值衍生出的扩展命令p &print &e &call 命令这几个命原创 2016-06-02 15:19:03 · 4327 阅读 · 0 评论 -
LLDB调试命令(二)掌握target命令 让你的项目崩溃位置从此无处遁形
大伙经常做项目都知道,iOS程序崩溃,很多都是因为 数组越界 访问野指针 适配布局语句不合法 版本系统兼容 等原因造成的,但遇到多人协同开发的项目,遇到崩溃问题,有时候往往我们不能最快的定位到项目崩溃的代码位置,因为很多代码不是我们本人写的, 我们尝试了 为 xcode 设置全局断点的方法,来获取代码崩溃的位置,但这种方法,只有60%的成功几率。假设我们尝试了之前寻找崩溃的方原创 2016-06-02 16:54:10 · 3054 阅读 · 0 评论 -
Objective-C Associated Objects 的实现原理
前言想突破自身的技术瓶颈,提高自身iOS开发水平,深挖 Runtime源码 一定是个不错的方法。本篇博客我们结合 Runtime源码 讲一下 Objective-C Associated Objects 的实现原理。 由于在iOS开发中经常需要使用分类,如果我们需要为已经存在的类添加属性,使用 @property 并不能在分类中正确创建实例变量和存取方法,不过 通过 Objective原创 2017-01-22 12:17:27 · 1043 阅读 · 0 评论