![](/img/trans.png)
[英]Does `nonatomic` makes sense in a `readonly` declared property (including class property)?
[英]Does @property copy in combination with readonly make sense?
如果我理解正確, copy
會強制 setter 創建傳入對象的副本。但是,如果我將它與readonly
一起使用,則不會有 setter。 那么我的假設是否正確,結合@property (copy, readonly)
沒有任何意義或者我錯過了什么?
這確實有道理。 例如,如果您只想在實現中訪問屬性的設置器:
@interface MyClass : NSObject
@property (nonatomic, copy, readonly) NSData *data;
- (id)initWithData:(NSData *)data;
@end
並在.m
文件中的類延續中:
@interface MyClass ()
@property (nonatomic, copy, readwrite) NSData *data;
@end
請注意,在這種情況下,需要在公共標頭中copy, readonly
聲明!
根據Apple的文檔(我在這里為您鏈接):
copy
指定應使用對象的副本進行分配。先前的值被發送一個
release
消息。復制是通過調用
copy
方法來制作的。 此屬性僅對必須實現NSCopying
協議的對象類型有效。
所以是的,你是對的...... readonly
創建了一個 getter 方法,而copy
將被有效地忽略,因為沒有 setter 方法可以進行賦值。
你是對的,兩者兼有是沒有意義的。
我認為,如果我在讀取時看到這樣的屬性,我希望收到一個不同的返回對象到 ivar,除非返回的對象被宣傳為不可變的。
如果我有
@property (readonly, copy) NSMutableArray* foo;
我這樣做:
NSMutableArray* myFoo = [theObject foo];
[myFoo addObject: @"string"];
NSMutableArray* myOtherFoo = [theObject foo];
我希望myOtherFoo
中沒有myFoo
具有的額外字符串。
注意:我還沒有驗證這一點。
我現在已經檢查過了,我的期望是不正確的。 我想我會認為這是一個錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.