使用Objective C中的类方法的缺点

Ric*_*kiG 1 objective-c class-method

我想知道是否存在任何内存/性能缺陷,或者只是缺点,使用类方法,如:

+ (void)myClassMethod:(NSString *)param {
// much to be done...
}
Run Code Online (Sandbox Code Playgroud)

要么

+ (NSArray*)myClassMethod:(NSString *)param {
// much to be done...
    return [NSArray autorelease];
}
Run Code Online (Sandbox Code Playgroud)

在类方法中放置很多功能很方便,特别是在我必须处理内存管理(iPhone)的环境中,但是在方便的时候通常会有一个问题?

一个例子可能是思考Web服务,它由许多具有非常简单功能的类组成.即

TomorrowsXMLResults;
TodaysXMLResults; 
YesterdaysXMLResults;
MondaysXMLResults;
TuesdaysXMLResults;
.
.
.
n
Run Code Online (Sandbox Code Playgroud)

我在我的Web服务类中收集了大量这些,并且只是实例化Web服务类,并让这个类的方法在"结果"类上调用类方法.这些类很简单,但它们处理大量的Xml,实例化大量的对象等.

我想我问的是,类方法在堆栈和内存中是否存在或被处理的不同于实例化对象的消息?

或者它们是否只是在幕后实例化并再次拉下来,因此,只是一种节省几行代码的方法?

Jar*_*tar 10

简短回答:没有缺点 - 按预期使用

答案很长:objective-c中的类实际上是对象,你可以像其他任何东西一样使用它(检查 - [NSObject类]的返回类型 - 指向obj-c对象的指针).当您调用[yourclass alloc]时,您实际上是向您的类发送消息,该类是一个描述运行时类的对象.(该方法本身是围绕malloc()的一堆包装器,因此并没有涉及到任何魔法.)至于如何处理这些对象,objc中的所有对象(包括类)都在堆中分配,因此堆栈会播放没有部分.编辑:为了清楚起见,使用类方法而不是实例方法没有区别,除了使用类方法您不需要具有类的实例.

为了进一步阅读如何实现这些类对象,我推荐http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html