这是在IOS中创建我的类实例的最佳方法

时间:2011-09-15 07:57:19

标签: objective-c ios

我有一个名为'WebServicesiPhone的类....我想创建这个类的一个实例并做一些json解析函数并将结果内容存储到Delegate类的某些数组中......

如何在其他类中声明此类的实例....这是最好的方法....

WebServicesiPhone *newsParser = [[WebServicesiPhone alloc] init];
[newsParser getData:0:nil:0:0];
[newsParser release];

或者我必须在其他类的.h文件中声明一个实例..像这样

WebServicesiPhone *newsParser;

并在方法文件中分配..如果我使用此方法,我必须在使用后释放该对象.....

newsParser = [[WebServicesiPhone alloc] init];

3 个答案:

答案 0 :(得分:1)

我认为你正在混合一些术语,所以我会尽可能简单地解释。

WebServicesiPhone *newsParser;不是一个实例,它是一个变量。如果在大括号之间的.h文件中声明它,它是一个实例变量,因为你的类的每个实例都有一个。如果它在.m文件中声明,它是一个局部变量,只能在你声明它的代码块中可用。

[[WebServicesiPhone alloc] init];实例化一个类型为WebServicesiPhone的新对象,也称为实例,当您将其赋值给newsParser时,无论是实例还是局部变量,它({{ 1}})成为指向类实例的指针。

因此,如果必须在代码周围使用此newsParser,最佳做法是为其创建实例变量(甚至是属性),并在类“newsParser方法中释放它。如果你只需要在一个代码块中,例如在dealloc方法实现中,只需创建一个局部变量,并在完成后立即释放它。

答案 1 :(得分:0)

这完全取决于您是否要公开公开实例。如果您不需要,请像在第一个示例中一样使用局部变量。

如果使用其他方法,请在类的dealloc方法中释放实例。

答案 2 :(得分:0)

如果您希望WebServicesiPhone的实例变量具有类范围,并且VdesmedT表示您希望公开公开实例变量。您可以通过不在.h中声明它来隐藏公开它但.m中的类扩展具有类范围。完成后释放它。通常在dealloc中,但是假设你在- (void)createWebService中分配init这个实例并一遍又一遍地调用它然后在类的dealloc方法中dealloc'ing它是不正确的内存管理。