從文檔中,MKMapView屬性Annotations是NSArray而不是NSMutableArray。所以註釋應該是「不可變的」。但是MKMapView的即時方法:addAnnotation和removeAnnotation能夠改變Annotations數組。所以表面上似乎存在一些不一致之處。肯定有一些我錯過了。希望有人知道可以對此有所瞭解。關於MKMapView註解的問題
回答
您打算使用addAnnotation
和removeAnnotation
添加/刪除註釋,而不是直接操縱註釋數組。
我假設這些功能都做了一些處理,以及從數組中添加/刪除註釋。
感謝您的答案,我只是想知道添加和刪除調用會以某種方式替換舊的數組。正如你所說,我們打算使用給定的方法,分配的類型是爲了防止我們直接做任何事情。 – Stanley
通過聲明annotations
性的NSArray
,通過該屬性訪問陣列不能安全地修改它,必須把它作爲一個不可變NSArray
代碼。但是,這並不意味着數組本身是不可變的。
這裏有這樣的事情怎麼可能工作的例子:
@interface MyObject
{
// instance variables
NSMutableArray* internalArrayRepresentation;
}
// properties
@property (nonatomic, readonly) NSArray* immutableAccessor;
// methods
-(void)addItem:(NSObject*)object;
@end
@implementation MyObject
@synthesize immutableAccessor=internalArrayRepresentation;
-(id)init
{
if ((self = [super init]))
{
// create the mutable array
internalArrayRepresentation = [[NSMutableArray alloc] init]
}
}
-(void)addItem:(NSObject*)object
{
[internalArrayRepresentation addObject:object];
}
...
@end
在這個例子中,你可以看到,internalArrayRepresentation
是一個可變數組,其訪問的MyObject的外面immutableAccessor
。但由於屬性定義表明immutableAccessor
是NSArray
,調用者需要以這種方式對待它,並且無法操作它。
還有其他的實現可以實現這一點。
使用這種模式的典型原因是因爲你想讓MyObject
保持對數組內容的控制:也許只有某些對象可以被添加,也許對象需要修改或克隆,任何東西都可以添加,但沒有東西可以刪除等。
感謝您的詳細解答。代碼模式(例如「@sysnthesize」行中的賦值)是我以前從未見過的。但它們必須是比我遇到的更先進的代碼。謝謝 ... – Stanley
- 1. IOS/Objective-c:關於MKMapView的問題
- 2. 帶有註釋問題的MKMapView問題
- 3. mkmapview userlocation註冊問題
- 4. 關於的MKMapView
- 5. 問題 - 關於註銷
- 6. 關於關注WPF的一些問題
- 7. 關於MKMapView的UIPanGestureRecognizer?
- 8. 標註泡泡MKMapView移動問題
- 9. MKMapView註釋位置更新問題
- 10. Swift MKMapView針腳註釋問題
- 11. MKMapView在加載註解時遇到問題
- 12. 關於Javascript注入的問題
- 13. 關於SQL注入的問題
- 14. NLP新手,關於註釋的問題
- 15. 關於@Override註釋的問題
- 16. MKMapView Google問題
- 17. MKMapView縮放到註解 - annotationVisibleRect
- 18. 關於理解bio_push的openssl問題
- 19. 關於XML解析的問題
- 20. 關於解除綁定的jQuery問題
- 21. 關於用jsoup解析Html的問題
- 22. 關於HTML解析的問題
- 23. Rails關注問題
- 24. MKMapView刷新問題
- 25. Monotouch MKMapView UIGestureRecognizer問題
- 26. MKMapView覆蓋問題
- 27. iPhone MKMapView - MKPolygon問題
- 28. iOS版 - 的MKMapView - 可拖動的註解
- 29. 添加註解爲座標的MKMapView
- 30. MKMapView的自定義註解視圖
我看不到矛盾或矛盾。 –