关于UIEdgeInsetsMake和运行时的知识

看到这篇博客提到自定义下拉刷新控件http://blog.csdn.net/x6587305x/article/details/42640291,我通过自定义下拉刷新控件学到的关于UIEdgeInsetsMake和运行时的知识。


UIEdgeInsetsMake的作用

UIEdgeInsets UIEdgeInsetsMake(

CGFloat top,

CGFloat left,

CGFloat bottom,

CGFloat right

);


他的作用就是定义一个在scrollview被拽出一个contentOffset的时候的一个空间配合blocks可以实现下拉刷新中footer部分的停留。

例如:self.tableView.contentInset = UIEdgeInsetMake([self headerRefreshHeight],0,0,0);

官方的文档介绍是:

UIEdgeInsets
Defines inset distances for views.

typedef struct {
    CGFloat top, left, bottom, right;
} UIEdgeInsets;
Discussion
Edge inset values are applied to a rectangle to shrink or expand the area represented by that rectangle. Typically, edge insets are used during view layout to modify the view’s frame. Positive values cause the frame to be inset (or shrunk) by the specified amount. Negative values cause the frame to be outset (or expanded) by the specified amount.

See also UIEdgeInsetsMake and UIEdgeInsetsZero.

Declared In
UIGeometry.h

==》通俗的解释是:

Edge  
n. 边缘;优势;刀刃;锋利
vt. 使锐利;将…开刃;给…加上边

inset
n. 插图,插页;插入物
vt. 嵌入;插入

主要是理解下UIEdgeInsets在IOS UI里的意义.
UIEdgeInsets==>这货其实就是插入间隔区域。正值表示间隔值,负值表示超出参照物的距离。

这东西在设置button和tabor的时候用过,现在才理解了。



下面来说一下运行时的一部分我用到的知识。

runtime是一套比较底层的纯C语言API,属于1个C语言库,包含了很多的C语言API。

在我们平时编写的OC代码中,程序运行过程时,其实最终都是转成了runtime的C语言代码,runtime算是OC的幕后工作者。

比如我们创建一个对象的方法中

OC:

[[JJJPerson alloc]init]

runtime:

objc_msgSend(objc_msgSend("MJPerson","alloc"),"int")


那么runtime是用来干什么的?它是属于OC的底层,可以进行一些非常底层的操作(用OC是无法实现的,不好实现)

1、在程序运行过程中,动态创建一个类(比如kvo的底层实现)

在程序运行过程中,动态创建一个类添加属性和方法,修改属性和方法

在遍历一个类的所有成员变量(属性)和方法时。


2、当我们调用某个对象的对象方法时,它会首先在自身isa指针指向的类(class)methodLists中查找该方法,如果找不到则会通过class的super_class指针找到其父类,然后从其methodLists中查找该方法,如果仍然找不到,则继续通过super_class向上一级查找。



下面说一下我用到的一个东西

objc_getAssociatedObject(self, &topShowViewChar);

objc_setAssociatedObject(self, &topShowViewChar, topShowView, OBJC_ASSOCIATION_RETAIN_NONATOMIC);


因为即使是类的扩展也无法替原来的类添加属性,于是用到了运行时进行属性添加,&topShowViewChar是该对象实例的属性的键。对象实例的属性的值是topShowView,OBJC_ASSOCIATION_RETAIN_NONATOMIC是关联策略。

objc_removeAssociatedObjects可以删除指定对象实例的所有扩展属性。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值