iOS自定义结构体
2017-07-29 本文已影响109人
追沐
一、提要
通过以官方的CGSize为例,自定义Objective-C中的结构体,并使用。
二、CGSize
1、定义结构体CGSize
/* Sizes. */
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
对应的
struct 结构体名{
类型名 成员名1;
类型名 成员名2;
... ...
类型名 成员名n;
};
上述首先自定义了一个结构体,这和C语言里面自定义结构体一样。typedef struct CGSize CGSize是给此结构体定义了一个别名,在OC里面结构体别名和结构体名尽量保持一致?看文档是这么写的。
2、CGSizeMake
/* Make a size from `(width, height)'. */
CG_INLINE CGSize CGSizeMake(CGFloat width, CGFloat height);
这里CG_INLINE是一个宏:# define CG_INLINE static inline,这是系统的一个宏,如果你不用这个宏,可以直接写成static inline CGSize CGSizeMake(CGFloat width, CGFloat height);
三、自定义结构体
这里以自定义一个button的点击范围的结构体为例
struct ClickSize {
CGFloat top;
CGFloat left;
CGFloat bottom;
CGFloat right;
};
typedef struct ClickSize ClickSize;
CG_INLINE ClickSize
ClickSizeMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right)
{
ClickSize clickSize;
clickSize.top = top;
clickSize.left = left;
clickSize.bottom = bottom;
clickSize.right = right;
return clickSize;
};
这就OK了,就剩下使用了,使用的时候需要引入头文件。
这里是写一个扩大button点击方法的例子,使用了结构体
/**
扩大button的点击范围
@param size 设置点击区域,控制上、左、下、又的扩大外围
*/
- (void)enlargeClickAreaWithClickArea:(ClickSize)size;
/// 扩大button的点击范围
- (void)enlargeClickAreaWithClickArea:(ClickSize)size {
objc_setAssociatedObject(self, &topNameKey, [NSNumber numberWithFloat:size.top], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &rightNameKey, [NSNumber numberWithFloat:size.right], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &bottomNameKey, [NSNumber numberWithFloat:size.bottom], OBJC_ASSOCIATION_COPY_NONATOMIC);
objc_setAssociatedObject(self, &leftNameKey, [NSNumber numberWithFloat:size.left], OBJC_ASSOCIATION_COPY_NONATOMIC);
}
这里ClickSize直接被传入参数使用,传入参数的时候和CGSize一样,而且还会有提示,很好用。
[view enlargeClickAreaWithClickArea:CGSizeMake( 10, 10, 10, 10)];
四、最后
- 结构体定义起来个人觉得还是比较麻烦的,但是一次定义了之后用起来还是很好用的。
- OC中结构体真是很好用,但是对性能什么的会不会造成什么大的影响这还没研究,应该是不会吧,我看在官方的文档中也用了很多结构体,有兴趣的小伙伴我们可以一起交流交流。