分類是不能合成屬性的,因為合成屬性會生成對應的例項變數,而分類是不允許新增例項變數的(例項變數所在記憶體區域已初始化為不可更改,無法在動態執行時修改之)。
雖然不能增加例項變數,但是新增屬性還是可以的,只不過需要自己在分類中實現get和set方法,同時標記屬性為動態獲取。
其中一種方法叫做關聯引用,實現了用訪問器來訪問屬性,當然實際上並沒有例項變數,所以本質上只不過是增加了兩個方法而已。
首先在.h中宣告屬性:
[objc]view plain
copy
#import
@inte***ce
uiviewcontroller (propertytest)
@property
(nonatomic
, copy
) nsstring
*testproperty;
@end
然後在.m中實現:
[objc]view plain
copy
#import "uiviewcontroller+propertytest.h"
#import
const
char
ktestproperty;
//宣告乙個唯一位址的key。或用static char ktestproperty;
@implementation
uiviewcontroller (propertytest)
@dynamic
testproperty;
//執行時動態獲取
- (void
)settestproperty:(
nsstring
*)testproperty
- (nsstring
*)testproperty
@end
然後用**測試一下:
[objc]view plain
copy
self
.testproperty
= @"testproperty"
; self
.testproperty
= [self
.testproperty
:@"add string"
];
nslog(@"%@"
, self
.testproperty
);
列印如下:
[objc]view plain
copy
2015
-05-
1715:
12:3
6.816
test_5_
17[3
508:
1209
580] testpropertyadd string
可見實現了屬性的get和set功能。
給nsstring類新增兩種型別的屬性, 字串型別的tag值strflag, 以及int型的tag值inttag.
定義這個兩個屬性的set和get方法:
[objc]view plain
copy
"font-size:18px;"
>
@inte***ce
nsstring (ass)
// 物件屬性的set和get
- (void
)setstrflag:(
nsstring
*)strflag;
- (nsstring
*)strflag;
// 非物件屬性的set和get
- (void
)setintflag:(
int)intflag;
- (int
)intflag;
@end
實現這四個方法:
需匯入runtime標頭檔案:
[objc]view plain
copy
#import
[objc]view plain
copy
@implementation
nsstring (ass)
static
int_intflag;
static
nsstring
*_strflag;
- (void
)setstrflag:(
nsstring
*)flag
- (nsstring
*)strflag
- (void
)setintflag:(
int)intflag
- (int
)intflag
@end
使用規則和類別差不多, 乙個是拓展了方法, 乙個是拓展了屬性而已:
[objc]view plain
copy
nsstring
*str =
@"macro "
; // 定義乙個系統的nsstring物件
str.strflag
= @"abc"
; // 給字串tag賦值
str.intflag= 4
56; // 給int型tag賦值
nslog(@"%@:%@-%d"
, str, str
.strflag
, str
.intflag
); // 使用拓展的屬性
工程原始碼
iOS分類新增屬性
我們可以通過runtime來給ios的分類新增屬性.1.首先我們像普通的類一樣在.h裡頭使用 property宣告乙個屬性 ch.h.這裡是 類的ch分類的.h檔案 inte ce ch property nonatomic strong nsstring name end這時,m中就會出現兩個警告...
ios 分類新增屬性。
我們都知道可以通過分類新增方法,但是是否可以新增變數有一部分人就不知道了 其實分類裡面是不可以新增成員變數的,但是卻可以新增屬性。這是因為在分類中新增的屬性不會自動生成set get方法,這是就需要自己在分類的實現檔案裡面實現屬性的set get方法,如果你跟平時一樣去寫set get方法你會發現 ...
iOS 為分類新增屬性
我們知道分類可以很簡單的新增方法,但是新增屬性卻無能為力,但是我們還是可以通過動run time的associate就可以做到 比如說我要在uimage中新增乙個url屬性 h inte ce uiimage url property nonatomic,copy nsstring url end ...