簡體   English   中英

@property copy 與 readonly 結合是否有意義?

[英]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.

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