Objective-C中@encode的使用

来源:http://www.cnblogs.com/zhizi-material/archive/2016/11/04/6031037.html
-Advertisement-
Play Games

今天看Mansonry的代碼時,碰到一個生僻的關鍵字(也許只是自己沒用過)。:-) @encode => 將給定類型編碼為內部表示的字元串。 為了方便自己查閱,順便也寫個小例子,貼在這裡,實踐出真知嘛。 NSLog(@"UIViewController : %s", @encode(UIViewCo ...


今天看Mansonry的代碼時,碰到一個生僻的關鍵字(也許只是自己沒用過)。:-)

 

@encode  => 將給定類型編碼為內部表示的字元串。

為了方便自己查閱,順便也寫個小例子,貼在這裡,實踐出真知嘛。

 

    NSLog(@"UIViewController : %s", @encode(UIViewController));

    NSLog(@"CGRect : %s", @encode(CGRect));

    NSLog(@"int : %s", @encode(int));

    NSLog(@"float : %s", @encode(float));

    NSLog(@"double : %s", @encode(double));

    NSLog(@"BOOL : %s", @encode(BOOL));

    NSLog(@"long : %s", @encode(long));

    NSLog(@"short : %s", @encode(short));

 

    NSDictionary *numberDic = @{@"double"  : [NSNumber numberWithDouble:1.00f],

                                @"float"   : [NSNumber numberWithFloat:2.0f],

                                @"int"     : [NSNumber numberWithInt:2],

                                @"long"    : [NSNumber numberWithLong:2],

                                @"bool"    : [NSNumber numberWithBool:YES],

                                @"short"   : [NSNumber numberWithShort:2],

                                };

    for(NSString *key in numberDic){

        NSNumber* value = [numberDic valueForKey:key];

        const char * pObjCType = [value objCType];

        if (strcmp(pObjCType, @encode(double))  == 0) {

            NSLog(@"double : %@", value);

        }

        if (strcmp(pObjCType, @encode(float))  == 0) {

            NSLog(@"float : %@", value);

        }

        if (strcmp(pObjCType, @encode(int))  == 0) {

            NSLog(@"int : %@", value);

        }

        if (strcmp(pObjCType, @encode(long))  == 0) {

            NSLog(@"long : %@", value);

        }

        if (strcmp(pObjCType, @encode(bool))  == 0) {

            NSLog(@"bool : %@", value);

        }

        if (strcmp(pObjCType, @encode(short))  == 0) {

            NSLog(@"short : %@", value);

        }

    }

 

這段代碼的輸出如下:

2016-11-04 16:18:56.316 test[10003:251554] UIViewController : {UIViewController=#}

2016-11-04 16:18:56.316 test[10003:251554] CGRect : {CGRect={CGPoint=dd}{CGSize=dd}}

2016-11-04 16:18:56.316 test[10003:251554] int : i

2016-11-04 16:18:56.316 test[10003:251554] float : f

2016-11-04 16:18:56.316 test[10003:251554] double : d

2016-11-04 16:18:56.317 test[10003:251554] BOOL : B

2016-11-04 16:18:56.317 test[10003:251554] long : q

2016-11-04 16:18:56.317 test[10003:251554] short : s

2016-11-04 16:18:57.268 test[10003:251554] double : 1

2016-11-04 16:18:57.268 test[10003:251554] float : 2

2016-11-04 16:18:57.268 test[10003:251554] int : 2

2016-11-04 16:18:57.268 test[10003:251554] long : 2

2016-11-04 16:18:57.269 test[10003:251554] short : 2

 

從上我們看出 int 被編碼為 i;float為f;等等。

這裡遇到一個問題: [NSNumber numberWithBool:YES] 在調用 objCType 方法時,返回的是"c", 而不是"B", 所以下麵的if判斷並沒有列印bool相關的輸出。 針對這個問題,我做了查找,"B"表示的是一個C++ bool,Ojbective-C中BOOL確切的說是singned char, 所以調用objCType時返回的是"c"。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開源一個即時通訊類App,支持純文本、語音、地理位置、圖片聊天,同時還加入了好友圈功能,支持分享動態和發送圖片,支持搜索附近的人,使用的百度地圖定位功能;由Bmob後端雲提供伺服器支持,歡迎喜歡的伙伴在我的github上面start和fork。項目地址:https://github.com/tony ...
  • 隊列組 讓隊列里的任務同時執行,當任務都執行完畢時,再以通知的形式告訴程式員。舉例,同時下載兩張圖片,兩張圖片都下載完了,在合成成一張。 代碼: 日誌 效果: 如果不用隊列組,下載第一張圖片、下載第二張圖片、合併兩張圖片,就只能當做一個任務放入隊列中,不能同時下載兩張圖片,耗時幾乎多了一倍。因為,如 ...
  • 說起鏈式編程和函數式編程,小伙伴們千萬不要緊張。 聽著很高大尚,其實也就那麼回事。相信有過C#開發經驗的,或者其他編程經驗的,只要不是OC,一看就知道。 看兩行代碼: 上面的就是鏈式編程+函數式編程。 來個大白話解釋:看到括弧裡面的參數了吧,跟C的函數調用是不是很相似,包括別的語言,都用小括弧傳參, ...
  • 代理這東西,真的不想再談了,估計是個iOS開發人員都能熟練使用,跟Notification和Block一樣,都用的滾瓜爛熟了。 這裡小小的談論一下代理的擴展:隱式代理和多播代理,其實非常簡單。 隱式代理:就是定義協議的屬性時不用再遵守協議了,實現方法的類也不用在遵守協議了,因為協議方法定義在NSOb ...
  • (以下圖片在IE瀏覽器中可能無法顯示) 在開始筆記之前先加點之前記下的小知識點: UIView的常見屬性和方法: 1.@property(nonatomic,radonly)UIView *superview; 獲得自己的父控制項對象 2.@property (nonatomic,radonly,co ...
  • 動畫效果可以大大提高界面的交互效果,因此,動畫在移動開發中的應用場景較為普遍。掌握基本的動畫效果在成熟的軟體開發中不可或缺。除此之外,用戶對於動畫的接受程度遠高於文字和圖片,利用動畫效果可以加深用戶對於產品的印象。因此本文給出安卓設計中幾種常見的動畫效果。 基礎知識 在介紹安卓中的動畫效果之前,有必 ...
  • 1、簡介 Fresco是Facebook最新推出的一款用於Android應用中展示圖片的強大圖片庫,可以從網路、本地存儲和本地資源中載入圖片。相對於ImageLoader,擁有更快的圖片下載速度以及可以載入和顯示gif圖等諸多優勢,是個很好的圖片框架。 2、特點 1)記憶體管理 在5.0以下系統,Fr ...
  • 本篇記錄星級評分組件的創建過程以及CALayer的運用。 為了實現一個星級評分的組件,使用了CALayer,涉及到mask、CGPathRef、UIBezierPath、動畫和一個計算多角星關鍵節點的演算法。 CALayer管理基於圖像的內容,並讓我們可以在內容上添加動畫。UIView及其子類擁有一個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...