///**************************
// MyClass.m
#import "MyClass.h"
static MyClass *myClass = NULL;
@implementation MyClass
(MyClass *)sharedMyClass {
myClass = NULL;
myClass = [[MyClass alloc] init];
return myClass;
}
@end
嗨,专家们,我只想知道myClass是一个静态的ObjC对象,当没有人再引用它时,它会被ARC自动释放,所以没有内存泄漏?它正确吗?
这里有一个singleton类实例的例子,如果需要,您可以在整个应用程序中使用它。它从未发布,也不打算发布。
@interface MyClass : NSObject
+ ( MyClass * ) singleton;
@end
这就是接口,因此您将以MyClass.singleton
的形式访问它。实现是这样的。dispatch_once
绒毛的原因是为了使其在可以同时从多个地方访问的环境中安全。
@implemenation MyClass ()
+ ( MyClass * ) singleton
{
static MyClass * a;
static dispatch_once_t t;
dispatch_once ( & t, ^ {
a = [[MyClass alloc] init];
} );
return a;
}
@end
请注意,这也依赖于一个静态变量。该变量从创建时起一直保留,直到永远或应用程序退出。
static MyClass *myClass
创建对存储在该值中的指针的引用。只要myClass
将保持有效的对象地址,该对象就不会被解除分配。基本上,这个变量将一个+1加到存储对象的引用计数上。如果您希望该对象有一个要解除分配的更改,则必须更改该变量的值以指向其他对象(或返回nil
(。
附带说明一下,Objective-C中的static
与类成员的静态修饰符没有关系,在C/Objective-C,static
是指其他文件看不到的符号,例如Swift中的fileprivate
。