[英]User Defined Runtime Attributes and Associated Objects
我目前正在嘗試通過以下算法在Xcode 6中使用用戶定義的運行時屬性:
使用關聯對象將自定義屬性添加到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
通過Xcode故事板設置這些屬性的值
在運行時通過代碼訪問這些屬性
-(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.