相关疑难解决方法(0)

为什么在目标c中允许自我在静态环境中

为什么self在Objective-C中使用静态上下文?

我认为这是允许的,然后我遇到了内存错误,花了我一个星期才发现这self不是从类调用其他静态方法而不是键入类名的别名.

Xcode及其编译器似乎非常聪明地找到常见的陷阱,为什么它甚至不会产生类似的警告呢?

xcode objective-c

41
推荐指数
3
解决办法
8519
查看次数

super allocWithZone在单例类概念中有一些疑问

我是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是一个静态方法,它将检查此类的对象是否存在.如果是这样,它将返回先前创建的对象,否则它将创建一个新对象.

我有一些问题:

  1. 如果sharedManager是静态的,它如何访问super

  2. 当我打印[super class]为什么它给出当前的类名?

  3. 为什么[[super allocWithZone:NULL] init]返回当前的类对象?

  4. 如果super等于self这里,为什么它不调用当前类allocWithZone:(NSZone *)zone

objective-c

7
推荐指数
1
解决办法
1603
查看次数

标签 统计

objective-c ×2

xcode ×1