我們應該在Objective-C的基本屬性上使用屬性(assign)
這是常識,但我從來沒有清楚地解釋爲什麼我們要這樣做。爲什麼我們總是分配Objective-C原語?
考慮
[myObject setIntProperty:22];
爲具有myObject
類
我想象說我們會被分配intProperty
指針堆棧存儲器保存價值22如此以來,這個指針已經住上對於我們的財產有任何價值,這是否意味着每個原語在堆棧內存中都有無限的生命期?
一些更多的代碼來說明什麼,我不明白:
MyObject.h ----
@interface MyObject : NSObject
@property (nonatomic, assign) int myInt;
@property (nonatomic, assign) NSString* myString;
@end
OtherFile.m ----
-(void) doSomething
{
int x = 22;
NSString* str = @"something";
MyObject* obj = [[MyObject alloc] init];
obj.myInt = x;
obj.myString = str;
[self doSomethingInOtherFunctionWith:obj];
}
現在,一旦doSomething
函數已經完成並且繼續前進,分配的字符串myString現在指向無,因爲它與函數的本地共享指針str,
,該指針在該函數運行。但myInt仍然是22.
我明白,這是它的工作方式,通過價值傳遞,我不質疑它是如何工作的,只是爲什麼。 int不必是某個級別的指針嗎?
對象在堆上,所以他們的ivars也在堆上。使用assign的原因是它們不是對象,所以保留或複製它們是沒有意義的。 –