This is (one) application of the "wrapper" design pattern - make a class that 
wraps (contains) an NSMutableArray, and only expose those properties and 
methods you want clients to have access to. This is possible by declaring 
public readonly @properties, but redeclaring them in your implementation file 
using an anonymous category. Ex:

MyFoo.h
@interface MyReadonlyFoo : NSObject

@property (nonatomic, readonly) NSMutableArray *myFooObjects;

MyFoo.m
#import "MyFoo.h"

@interface MyReadonlyFoo ()
@property (nonatomic, readwrite) NSMutableArray *myFooObjects;
@end

@implementation MyReadonlyFoo

@synthesize myFooObjects;

@end

Now your implementation has access to read-write accessors, but everyone else 
only sees readonly accessors. They should still be KVC/KVO compliant.
(Note they syntax may be slightly off - this is just what I remember from 
various 'learn ObjC' books…)

On Jul 11, 2012, at 1:17 AM, Rick Mann wrote:

> I feel certain people have run into this before, but my Googling didn't turn 
> up exactly what I was looking for.
> 
> I'd like to create a "mutable read-only" array property. I want clients of 
> the class to be able to observe changes to the *contents* of the array (that 
> is, if an element is added or removed), in addition to changes of the entire 
> array. But I don't want those clients to be able to add or remove anything 
> to/from the array themselves; I only want the class on which the property is 
> defined to be able to do that.
> 
> Is this possible? My first thought is to make a read-only NSArray* property, 
> but then it seems that addition or removal of elements to/from that property 
> wouldn't get observed; i.e., an NSArray should never change its contents.
> 
> What's the right way to do this? Thanks!
> -- 
> Rick
> 
> 
> _______________________________________________
> 
> Cocoa-dev mailing list ([email protected])
> 
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
> 
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/wsquires%40satx.rr.com
> 
> This email sent to [email protected]


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to