我在School
类具有可变mTeacher
一个实例:分配一个实例变量本身
@interface School : NSObject {
Teacher *mTeacher;
}
@end
在实现文件中,我有方法- (Teacher *)getTeacher
这应该返回任何现有的教师来说,如果有一个或创建一个并返回它:
- (Teacher *)getTeacher {
if (mTeacher != nil) {
return mTeacher;
}
return [[Teacher alloc] init];
}
可能有其他多个实例的方法调用此方法来获取Teacher
实例&分配到mTeacher
实例变量:
- (void)methodOne {
mTeacher = [self getTeacher];
...
}
- (void)methodTwo {
mTeacher = [self getTeacher];
...
}
所以,如果分配的方法之一已经是Teacher
一个实例mTeacher
,呼吁[self getTeacher]
当其他方法最终会与mTeacher = mTeacher
下(因为- (Teacher *)getTeacher
方法只是在这种情况下返回mTeacher
) 。我的问题是,在Objective-C中很好吗?我的getTeacher
方法有任何潜在的问题?
您正在实施Singleton设计模式。这里的另一个相关的帖子应该有所帮助:http://stackoverflow.com/questions/145154/what-should-my-objective-c-singleton-look-like –
我没有看到任何技术上的错误,但为什么不只是初始化一个'init'方法中的变量并在需要的地方使用它,而不是试图多次设置? (在风格上:与Objective-C相比,将教师作为一个属性而不是一个显式变量更符合我的想法,然后,再加上我对'init'的建议,“getter”会从你的代码中消失。) –
如果'mTeacher'永远不是'nil',为什么不用''''init'方法初始化它呢?另外,你应该检查出[Objective-c中的属性](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html) – Sudo