簡體   English   中英

用戶定義的運行時屬性和關聯的對象

[英]User Defined Runtime Attributes and Associated Objects

我目前正在嘗試通過以下算法在Xcode 6中使用用戶定義的運行時屬性:

  1. 使用關聯對象將自定義屬性添加到UIView類

     #define ASSOCIATED_OBJECT_GETTER_AND_SETTER(propertyType, propertyName, propertyNameWithCapital, associationType) \\ -(void)set##propertyNameWithCapital:(propertyType)_value \\ { \\ objc_setAssociatedObject(self, @selector(propertyName), _value, associationType); \\ } \\ -(propertyType)propertyName \\ { \\ return objc_getAssociatedObject(self, @selector(propertyName)); \\ } \\ @interface eMyTags : NSObject @property (nonatomic) NSString* name; @end @implementation eMyTags @synthesize name; @end @interface UIView (MyTags) @property (nonatomic) eMyTags* myTags; @property (nonatomic) NSString* myName; @end @implementation UIView (MyTags) @dynamic myTags, myName; ASSOCIATED_OBJECT_GETTER_AND_SETTER(eMyTags*, myTags, MyTags, OBJC_ASSOCIATION_RETAIN_NONATOMIC); ASSOCIATED_OBJECT_GETTER_AND_SETTER(NSString*, myName, MyName, OBJC_ASSOCIATION_RETAIN_NONATOMIC); @end 
  2. 通過Xcode故事板設置這些屬性的值 在此處輸入圖片說明

  3. 在運行時通過代碼訪問這些屬性

     -(void)viewDidLoad { [super viewDidLoad]; NSLog(@"myName: %@", view.myName); NSLog(@"myTags.name: %@", view.myTags.name); } 

當我編譯並運行時,輸出為:

myName: bla
myTags.name: (null)

那么為什么未設置myTags.name 我錯過了什么? 我不能設置自定義類型的用戶定義的運行時屬性嗎?

好吧, myTags不在內存中分配,也沒有初始化。 另一方面,值@“ bla”是一個字符串文字,它實際上是NSString的實例,並指向內存中的位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM