iOS自定義結構體

一、提要

通過以官方的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中結構體真是很好用,但是對性能什么的會不會造成什么大的影響這還沒研究,應該是不會吧,我看在官方的文檔中也用了很多結構體,有興趣的小伙伴我們可以一起交流交流。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容