为什么self在Objective-C中使用静态上下文?
我认为这是允许的,然后我遇到了内存错误,花了我一个星期才发现这self不是从类调用其他静态方法而不是键入类名的别名.
Xcode及其编译器似乎非常聪明地找到常见的陷阱,为什么它甚至不会产生类似的警告呢?
我是Objective-C的新手,我正在尝试根据Apple的文档创建一个单例类.
+ (MyGizmoClass*)sharedManager
{
if (sharedGizmoManager == nil) {
sharedGizmoManager = [[super allocWithZone:NULL] init];
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [[self sharedManager] retain];
}
Run Code Online (Sandbox Code Playgroud)
在此代码中sharedManager是一个静态方法,它将检查此类的对象是否存在.如果是这样,它将返回先前创建的对象,否则它将创建一个新对象.
我有一些问题:
如果sharedManager是静态的,它如何访问super?
当我打印[super class]为什么它给出当前的类名?
为什么[[super allocWithZone:NULL] init]返回当前的类对象?
如果super等于self这里,为什么它不调用当前类allocWithZone:(NSZone *)zone?