自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 cocoapods 出现JSON::ParserError - A JSON text must at least contain two octets!错误解决

问题出现 如何解决 总结问题出现某次pod install 就突然出现这个错误,试了好多方法无法解决,cocoapods的github上issue里面也有人提到这个问题,但是没有啥解决方案,经过我的探索,发现问题所在,废话不多说,看看怎么解决。无论是pod install 还是pod update,均提示如上错误,试过重装cocoapods、重新clone工程等方法都无效。...

2019-11-27 11:01:34 1937

原创 scrollview自定义分页大小

- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset withVelocity:(CGPoint)velocity{    //滑动视图在最左侧的时候再往最左侧滑或者在最右侧的时候再往最右侧滑的时候就不用计算了    if (self.adCollectionView.contentOffset.x < 0 || self.adCol...

2018-06-12 15:11:12 1367 1

原创 runtime源码探究(五)category的加载

本文扩展自:http://blog.sunnyxx.com/2014/08/30/objc-pre-main/ 这篇文章主要描述了iOS平台上main函数调用之前所发生的事。我们从这里开始讲述category是如何加载的。main函数开始之前,在一些准备工作之后,libSystem会调用void _objc_init(void)函数,这里便是runtime的入口,也就是这时候启动了runtime。苹

2017-02-27 17:54:13 641

原创 runtime源码探究(四)区分isKindOfClass、isSubclassOfClass、isMemberOfClass

看了网上那么多对这几个函数的区分,总觉得不如看源码来的实在:- (BOOL)isMemberOfClass:(Class)cls { return [self class] == cls;}isMemberOfClass的判定较为严格,必须得是跟当前类是同一个类,才会返回YES。- (BOOL)isKindOfClass:(Class)cls { for (Class tcls =

2017-01-18 17:20:08 498

原创 runtime源码探究(三)属性关联

objc_setAssociatedObject属性关联可以在运行时动态的给某个对象添加属性,来看objc_setAssociatedObject的实现:void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy) { _object_set_associa

2016-12-31 13:26:25 444

原创 runtime源码探究(二)strong的实现

objc_storeStrongoc中用strong修饰一个对象,实际上是调用了void objc_storeStrong(id *location, id obj)函数,location是引用对象的指针的地址,obj是对象本身。下面是该函数的完整实现:void objc_storeStrong(id *location, id obj){ id prev = *location;

2016-12-29 12:11:20 3810 1

原创 runtime源码探究(一) weak的实现

weak指针的建立weak修饰对象不增加其引用计数,apple通过一个hash表来实现对象的弱引用。 在Xcode下编写如下代码:__weak obj1 = obj;编译器编译之后变成类似如下的代码:objc_initWeak(&obj1,obj);翻开runtime源码,NSObject.mm,找到objc_initWeak函数,实现如下: * @param location Address o

2016-09-25 12:53:52 1776

原创 基于CABasicAnimation的完美跑马灯效果

在网上看了几个网友写的跑马灯效果,实现方式大同小异,都是使用UIView动画,在动画完成时再调用动画本身,无限的递归调用。这种方式有一个缺点,就是当界面切换或者APP切到后台的时候,动画会被系统强行停掉,然后再切回来的时候重新开始新的动画。另外我们希望滚动的文字动画是从最左侧开始,然后文字从右侧出来,这样重复循环,UIView动画也无法很好的支持。于是我使用CABasicAnimation进行实践,

2016-06-30 11:39:40 2126

原创 单链表的插入和删除

常见的数据结构只有两种:   1、数组   2、链表    数组中的元素是连续存储的,而链表的元素则可以不连续,只需要有指针指向下一个元素即可。因此链表适合存储插入删除比较频繁的一组数据。另外链表的存储空间是动态的,不必预先分配指定的空间大小。。下面介绍链表的几种常见操作。   首先先定义一个链表     struct linklist {    int dat

2016-04-15 14:02:53 729

原创 实现类似于微信大图查看器的放大缩小功能

scrollview本身具有放大缩小的功能,我们利用scrollview来实现。创建好scrollview之后,将imageview放到scrollview上另外微信的图片查看器还有一个从小图的位置开始放大的功能,我们通过改变大图做放大缩小动画时候的初始的坐标来实现它

2016-03-01 13:51:52 1379

原创 iOS自定义scrollview的滑动停止位置

- (CGPoint)nearestTargetOffsetForOffset:(CGPoint)offset{    CGFloat pageSize = _cellWidth + 7.5f;    NSInteger page = roundf(offset.x / pageSize);    CGFloat targetX = pageSize * p

2016-01-20 19:43:33 2616

原创 改变tableview section headerView 的吸顶位置

plain类型的tableView的section header是自动吸顶到tableView 的顶部的。有时候可能需要改变它的吸顶位置,我们通过scrollview的 contentInset属性来实现。contentInset是用来确定scrollview的contenview在scrollview上显示的范围的一个属性代码如下:   - (void)scrollVie

2016-01-12 10:59:30 7014

原创 获取tableView刷新完成状态

最近有个需求,需要获取tableView的刷新完成状态去做一些事情,找了好多方法,最终在http://stackoverflow.com/questions/16071503/how-to-tell-when-uitableview-has-completed-reloaddata这里找到了答案 。   两种方式  一种是[self.tableView reloadData];[se

2015-12-04 10:31:54 11320

原创 Swift 创建一个tableview

最近学习了一下swift,学完了基本语法尝试写了一个tableView,确实遇到好多坑,下面上代码,和大家交流交流 怎么创建一个程序就不说了。import UIKitTips:Swift里面的协议继承直接这样写就好了class ViewController:UIViewController,UITableViewDataSource,UITableVie

2015-10-30 23:24:25 508

原创 iOS 输入汉字限制字数问题

如果输入是汉字的话,输入框会优先捕获输入的字母,汉字还没选择的时候就已经开始计算字符了,根本没办法限制汉字。纠结了很久,看了网上好多解决方案,觉得注册通知中心那种方法不适合我的场景,于是我发现了新大陆 ,上代码 - (void)textViewDidChange:(UITextView *)textView    UITextRange * selectedRang

2015-10-20 16:37:32 1088

原创 iOS TextView自适应文字高度

刚刚在弄一个填写地址的输入框,输入框的高度随文字变化,想了一下用TextView,看了一下各种开源的代码,觉得好麻烦,自己简单写了一下,还算是好用,下面上代码- (void)viewDidLoad {    [superviewDidLoad];    // Do any additional setup after loading the

2015-10-16 14:25:35 1059

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除