有几件事:
首先,在应用程序委托中,您需要确保在任何对象尝试访问数组之前初始化数组。吸引顾客就是好办法。
-(void) getGlobalClasses{
if (globalClasses!=nil) {
return globalClasses;
}
NSMutableArray *newArray=[[NSMutableArray alloc] initWithCapacity:1]; //yes, I'm old school
self.globalClasses=newArray;
[newArray release];
return globalClasses;
}
现在,对属性的任何调用都保证返回一个数组。
在视图控制器中:
@property(nonatomic,assign) NSMutableArray *globalClasses;
然后每次引用它时,请确保使用self表示法:
self.globalClasses=//...whatever
说了这么多,是的
在应用程序中赤裸裸地粘贴数组或任何其他哑数据对象。您无法控制每段代码将对数组执行什么操作。在向数组中添加或删除数据的每个位置都必须复制所有验证代码。
最好将数组包装在一个自定义类中并对其进行保护,这样它就只能由classes方法更改。
像这样:
@interface MyData : NSObject {
@protected
NSMutableArray *myDataArray;
}
-(void) addObject:(id) anObject;
-(void) removeObjectAtIndex;(NSInteger) anIndex;
@end
@interface scratch ()
@property(nonatomic, retain) NSMutableArray *myDataArray;
@end
@implementation scratch
@synthesize myDataArray;
-(void) addObject:(id) anObject{
//...code to check if anObject is a valid one to add to the array
[self.myDataArray addObject:anObject];
}//------------------------------------addObject:------------------------------------
-(void) removeObjectAtIndex;(NSInteger) anIndex{
//... do bounds checking and other testing to ensure no problems
// will result from removing the object at the given idex
[self.myDataArray removeObjectAtIndex:anIndex];
}//-------------------------------------(void) removeObjectAtIndex;(NSInteger) anIndex------------------------------------
然后将自定义类添加到app委托的属性中,如上所示。这将使您的数据保持干净和模块化,因此您可以在各种应用程序对象中安全地使用它,而无需对每个对象中的阵列进行微观管理。