<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      iOS objc_setAssociatedObject 關聯對象的學習

      今天看了FDTemplateLayoutCell的源碼,類別里面相當頻繁使用了關聯對象,做筆記!!!學套路

      主要函數:

      void objc_setAssociatedObject(id object, const void *key, id value, objc_AssociationPolicy policy);
      
      id objc_getAssociatedObject(id object, const void *key); 
      
      void objc_removeAssociatedObjects(id object);

      基本說明:關聯對象就是runTime界的NSMultableDictionary 

      objc_setAssociatedObject 相當于 setValue:forKey 進行關聯value對象
      
      objc_getAssociatedObject 用來讀取對象
      
      objc_AssociationPolicy  屬性 是設定該value在object內的屬性,即 assgin, (retain,nonatomic)...等
      
       objc_removeAssociatedObjects 函數來移除一個關聯對象,或者使用objc_setAssociatedObject函數將key指定的關聯對象設置為nil。

      相關參數

      key:要保證全局唯一,key與關聯的對象是一一對應關系。必須全局唯一。通常用@selector(methodName)作為key。
      value:要關聯的對象。
      policy:關聯策略。有五種關聯策略。
      OBJC_ASSOCIATION_ASSIGN 等價于 @property(assign)。
      OBJC_ASSOCIATION_RETAIN_NONATOMIC等價于 @property(strong, nonatomic)。
      OBJC_ASSOCIATION_COPY_NONATOMIC等價于@property(copy, nonatomic)。
      OBJC_ASSOCIATION_RETAIN等價于@property(strong,atomic)。
      OBJC_ASSOCIATION_COPY等價于@property(copy, atomic)。
      使用場景:關聯對象相當于實例變量,在類別(也有人管叫分類)里面,不能創建實例變量, 關聯對象就可以解決這種問題。(對應屬性,有對應屬性的的runtime 解決方法,本篇文章主講 關聯對象學習)

      基本使用:舉例創建 UIButton類別

      //
      //  UIButton+Block.h
      //  SectionDemo
      //
      //  Created by HF on 2017/7/13.
      //  Copyright ? 2017年 HF-Liqun. All rights reserved.
      //
      
      #import <UIKit/UIKit.h>
      
      typedef void (^btnBlock)(id sender);
      
      @interface UIButton (Block)
      
      - (void)handelWithBlock:(btnBlock)block;
      
      @end
      
      //
      //  UIButton+Block.m
      //  SectionDemo
      //
      //  Created by HF on 2017/7/13.
      //  Copyright ? 2017年 HF-Liqun. All rights reserved.
      //
      
      #import "UIButton+Block.h"
      #import <objc/runtime.h>
      
      @implementation UIButton (Block)
      
      - (void)handelWithBlock:(btnBlock)block {
      
          if (block) {
              objc_setAssociatedObject(self,@selector(btnAction:) , block, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
          }
          [self addTarget:self action:@selector(btnAction:) forControlEvents:UIControlEventTouchUpInside];
      
      }
      
      - (void)btnAction:(id)sender
      {
          btnBlock block = objc_getAssociatedObject(self,@selector(btnAction:));
          if (block) {
              block(sender);
          }
      }
      
      @end

      注意到標記亮粉色部分 是第二個參數  const void *key 類型通常都是通常都是會采用靜態變量來作為關鍵字  可以自己創建 也可以使用"@selector(btnAction:) "。

      自己設置靜態變量做關鍵字:

      在FDTemplateLayoutCell 中 第二個參數進一步優化,出現了_cmd 代替了 &btnKey 或者 @selector(methodName).

      因為:
      _cmd在Objective-C的方法中表示當前方法的selector,正如同self表示當前方法調用的對象實例。

      這里強調當前,_cmd的作用域只在當前方法里,直指當前方法名@selector。例如:

      這樣處理好處是,該方法相對化簡了繁文縟節,并且可讀性良好。不容易寫錯key。

      參考 FDTemplateLayoutCell中使用_cmd 的使用

      至此,設置關聯對象關鍵key,一共有三種寫法:

      (1)靜態變量&btnKey  

      (2)@selector(methodName)

      (3)_cmd

       

      參考 

      (1)http://blog.csdn.net/luoyeffcs/article/details/27967193

      (2)http://blog.jobbole.com/79570/

      (3)http://www.jianshu.com/p/46cd19bc4b6b

      (4)http://www.jianshu.com/p/fdb1bc445266

       

      posted on 2017-07-13 20:05  ACM_Someone like you  閱讀(16437)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产免费播放一区二区三区| 日本一区二区三区18岁| 无码熟妇αⅴ人妻又粗又大| 精品一区二区三区在线成人| 中国孕妇变态孕交xxxx| 亚洲a片无码一区二区蜜桃| 91福利一区福利二区| 狠狠色噜噜狠狠狠狠色综合久av| 69精品丰满人妻无码视频a片| 国产成人精品2021欧美日韩| 九九日本黄色精品视频| 怡红院一区二区三区在线| 国产毛片精品av一区二区| 精品国产高清中文字幕| 国产精品爽爽va在线观看网站| 毛葺葺老太做受视频| 大尺度国产一区二区视频| 国产不卡在线一区二区| 国产精品一区二区国产馆| 一区二区不卡国产精品| 久久97人人超人人超碰超国产| 国产一区二区不卡精品视频| 成人亚欧欧美激情在线观看| 国产欧美综合在线观看第十页| 国产无遮挡裸体免费久久| 一面膜上边一面膜下边视频| 无码中文字幕av免费放| 国产良妇出轨视频在线观看| 少妇粗大进出白浆嘿嘿视频| 国精品91人妻无码一区二区三区| 国产精品推荐手机在线| 亚洲肥熟女一区二区三区| 忘忧草日本在线播放www| 久久国产综合色免费观看| 亚洲欧洲日韩国内精品| 精品一区二区不卡无码AV| 亚洲国产精品成人综合色在| 久久午夜无码鲁丝片午夜精品| 国产精品一线二线三线区| 国产精品三级中文字幕| 亚洲国产精品日韩在线|