国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

宏定義頭文件

2019-11-09 16:47:32
字體:
來源:轉載
供稿:網友

前言:

在工作中, 很多小伙伴都會在PCH文件定義一些常用的宏,但是又怕寫這些簡單的宏浪費時間,又有時候忘記怎么定義了怎么辦?本人在工作中也是如此。所以在這里給大家分享一些常用的宏定義,喜歡的小伙伴可以直接在項目中使用(持續更新)! 為了大家使用方便,請點擊GitHub - 宏定義頭文件下載 ! 1.獲取屏幕寬度與高度

define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height

根據一個網友(脫離語言)提醒, 如果支持橫屏可以用下面的宏:

if __ipHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 當前Xcode支持iOS8及以上

define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)

define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)

define SCREEN_SIZE ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale):[UIScreen mainScreen].bounds.size)

else

define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width

define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height

define SCREEN_SIZE [UIScreen mainScreen].bounds.size

endif

2.獲取通知中心

define LRNotificationCenter [NSNotificationCenter defaultCenter]

3.設置隨機顏色

define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

4.設置RGB顏色/設置RGBA顏色

define LRRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]

define LRRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]

// clear背景顏色

define LRClearColor [UIColor clearColor]

5.自定義高效率的 NSLog

項目開發中,我們會在許多地方加上Log,但是發布的時候又不想用這些Log,我們也不可能一個一個的刪除,所以自定義Log是必然的!

ifdef DEBUG

define LRLog(…) NSLog(@”%s 第%d行 /n %@/n/n”,func,LINE,[NSString stringWithFormat:VA_ARGS])

else

define LRLog(…)

endif

6.弱引用/強引用

define LRWeakSelf(type) __weak typeof(type) weak##type = type;

define LRStrongSelf(type) __strong typeof(type) type = weak##type;

使用方法.png

第二種使用方法,定義完弱引用宏之后,直接敲weak.png 7.設置 view 圓角和邊框

define LRViewBorderRadius(View, Radius, Width, Color)/

/ [View.layer setCornerRadius:(Radius)];/ [View.layer setMasksToBounds:YES];/ [View.layer setBorderWidth:(Width)];/ [View.layer setBorderColor:[Color CGColor]]

8.由角度轉換弧度 由弧度轉換角度

define LRDegreesToRadian(x) (M_PI * (x) / 180.0)

define LRRadianToDegrees(radian) (radian*180.0)/(M_PI)

9.設置加載提示框(第三方框架:Toast)

此宏定義非常好用,但是小伙伴需要CocoaPods導入第三方框架:Toast

使用方法如下: LRToast(@”網絡加載失敗”);

define LRToast(str) CSToastStyle *style = [[CSToastStyle alloc] initWithDefaultStyle]; /

[kWindow makeToast:str duration:0.6 position:CSToastPositionCenter style:style];/ kWindow.userInteractionEnabled = NO; / dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{/ kWindow.userInteractionEnabled = YES;/ });/

10.設置加載提示框(第三方框架:MBPRogressHUD)

此宏定義同上一個類似,如下圖:

MBProgressHUD提示框.png

// 加載

define kShowNetworkActivityIndicator() [UIapplication sharedApplication].networkActivityIndicatorVisible = YES

// 收起加載

define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible = NO

// 設置加載

define NetworkActivityIndicatorVisible(x) [UIApplication sharedApplication].networkActivityIndicatorVisible = x

define kWindow [UIApplication sharedApplication].keyWindow

define kBackView for (UIView *item in kWindow.subviews) { /

if(item.tag == 10000) / { / [item removeFromSuperview]; / UIView * aView = [[UIView alloc] init]; / aView.frame = [UIScreen mainScreen].bounds; / aView.tag = 10000; / aView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; / [kWindow addSubview:aView]; / } / } /

define kShowHUDAndActivity kBackView;[MBProgressHUD showHUDAddedTo:kWindow animated:YES];kShowNetworkActivityIndicator()

define kHiddenHUD [MBProgressHUD hideAllHUDsForView:kWindow animated:YES]

define kRemoveBackView for (UIView *item in kWindow.subviews) { /

if(item.tag == 10000) / { / [UIView animateWithDuration:0.4 animations:^{ / item.alpha = 0.0; / } completion:^(BOOL finished) { / [item removeFromSuperview]; / }]; / } / } /

define kHiddenHUDAndAvtivity kRemoveBackView;kHiddenHUD;HideNetworkActivityIndicator()

11.獲取view的frame/圖片資源

//獲取view的frame(不建議使用) //#define kGetViewWidth(view) view.frame.size.width //#define kGetViewHeight(view) view.frame.size.height //#define kGetViewX(view) view.frame.origin.x //#define kGetViewY(view) view.frame.origin.y

//獲取圖片資源

define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@”%@”,imageName]]

12.獲取當前語言

define LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])

13.使用 ARC 和 MRC

if __has_feature(objc_arc)

// ARC

else

// MRC

endif

14.判斷當前的iPhone設備/系統版本

//判斷是否為iPhone

define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)

define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@”iPhone”])

//判斷是否為iPad

define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)

define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@”iPad”])

//判斷是否為ipod

define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@”iPod touch”])

// 判斷是否為 iPhone 5SE

define iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f

// 判斷是否為iPhone 6/6s

define iPhone6_6s [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f

// 判斷是否為iPhone 6Plus/6sPlus

define iPhone6Plus_6sPlus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f

//獲取系統版本 //這個方法不是特別靠譜

define IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]

//建議使用這個方法

define IOS_SYSTEM_STRING [[UIDevice currentDevice] systemVersion]

//判斷 iOS 8 或更高的系統版本

define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))

15.判斷是真機還是模擬器

// 判斷是不是iOS系統,如果是iOS系統在真機和模擬器輸出都是YES

if TARGET_OS_IPHONE

endif

if (TARGET_IPHONE_SIMULATOR)

// 在模擬器的情況下

else

// 在真機情況下

endif

16.沙盒目錄文件

//獲取temp

define kPathTemp NSTemporaryDirectory()

//獲取沙盒 Document

define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]

//獲取沙盒 Cache

define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]

17.GCD 的宏定義

很多小伙伴都非常煩寫GCD的方法,所以在此定義為宏使用更加方便簡潔!如下圖:

GCD 宏使用方法.png

//GCD - 一次性執行

define kDISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);

//GCD - 在Main線程上運行

define kDISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);

//GCD - 開啟異步線程

define kDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);

宏與const 的使用:

很多小伙伴在定義一個常量字符串,都會定義成一個宏,最典型的例子就是服務器的地址。在此所有用宏定義常量字符的小伙伴以后就用const來定義吧!為什么呢 ?我們看看:

宏的用法: 一般字符串抽成宏,代碼抽成宏使用。const用法:一般常用的字符串定義成const(對于常量字符串蘋果推薦我們使用const)。宏與const區別:1.編譯時刻不同,宏屬于預編譯 ,const屬于編譯時刻2.宏能定義代碼,const不能,多個宏對于編譯會相對時間較長,影響開發效率,調試過慢,const只會編譯一次,縮短編譯時間。3.宏不會檢查錯誤,const會檢查錯誤

通過以上對比,我們以后在開發中如果定義一個常量字符串就用const,定義代碼就用宏。我們來看看如何使用const,列舉實際項目使用方法如下圖:

FANCommonConst.h中聲明一個常量字符串.png

FANCommonConst.m中實現一個常量字符串.png

在上圖本人只是簡單定義幾個常量字符串,我們創建一個類只要在.h和.m中包含#import


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 姜堰市| 兴化市| 本溪市| 蛟河市| 天柱县| 江山市| 桃园县| 浦江县| 光山县| 潮安县| 南江县| 光泽县| 湖州市| 天气| 都匀市| 磐安县| 灌阳县| 兰西县| 永福县| 天峻县| 康定县| 宿松县| 阿坝县| 嘉峪关市| 昆山市| 蒙阴县| 五莲县| 都昌县| 天长市| 宁津县| 墨竹工卡县| 宁陵县| 安溪县| 司法| 滁州市| 白河县| 保德县| 禹城市| 莆田市| 阜南县| 普洱|