Objective c 目标C类方法控制所有现有实例?
是否可以使用我创建的某些NSObject的类方法来控制所有现有实例Objective c 目标C类方法控制所有现有实例?,objective-c,Objective C,是否可以使用我创建的某些NSObject的类方法来控制所有现有实例 我希望委托类能够将消息发送到对象的类方法,然后这些类方法可以对那里的所有内容做出适当的反应。不使用一些对象集合是不行的。最简单的方法是将对象存储在一个数组中,并在希望发生某些事情时向所有对象发送一条消息。具体而言: static NSMutableArray *allObjects = nil; + (void) initialize { if (!allObjects) { allObjects = [
我希望委托类能够将消息发送到对象的类方法,然后这些类方法可以对那里的所有内容做出适当的反应。不使用一些对象集合是不行的。最简单的方法是将对象存储在一个数组中,并在希望发生某些事情时向所有对象发送一条消息。具体而言:
static NSMutableArray *allObjects = nil;
+ (void) initialize {
if (!allObjects) {
allObjects = [NSMutableArray new];
}
}
- (id) init {
if (self = [super init]) {
//Each object gets held in an array
[allObjects addObject:self];
}
return self;
}
+ (void) doSomethingToEveryObject {
[allObjects makeObjectsPerformSelector:@selector(doSomethingToThisObject)];
}
- (void) doSomethingToThisObject {
NSLog(@"Did something to %@",self];
}
- (void) release {
[super release];
//When the retain count reaches 1, then all external references have disappeared,
//and the only remaining reference is in the objects array.
if (self.retainCount == 1) {
[allObjects removeObject:self];
}
}
当然。只要让所有对象在创建时注册即可。例如:
- (id)init {
self = [super init];
if (!self) return nil;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(announceYourself:)
name:@"MYCLASS_ANNOUNCE"
object:nil];
return self;
}
+ (void)identifyInstances {
[[NSNotificationCenter defaultCenter] postNotificationName:@"MYCLASS_ANNOUNCE" object:self];
}
- (void)announceYourself:(id)notification {
NSLog(@"Instance %p reporting in!", self);
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; // VERY IMPORTANT -- IT WILL CRASH WITHOUT THIS
[super dealloc];
}
虽然这样做是可行的,但重写像release这样的方法总是让我觉得可疑。只要您知道自己在做什么,就可以这样做。如果不想重写release方法,也可以创建自己的数组类,该类不保留其成员。要避免三行函数似乎需要做很多工作。不。太可怕了。如果NSPointerArray不存在可以配置为不保留其元素的Objective-C数组,那么这可能是合理的。感谢Ed,这看起来像是我在概念上考虑的方法,但我应该使用NSPointerArray而不是NSMutableArray?对不起,我是iPhone开发人员;我不知道NSPointerArray,因为它在iPhone SDK中不存在。用它来代替是有意义的。