我有一个名为'WebServicesiPhone
的类....我想创建这个类的一个实例并做一些json解析函数并将结果内容存储到Delegate类的某些数组中......
如何在其他类中声明此类的实例....这是最好的方法....
WebServicesiPhone *newsParser = [[WebServicesiPhone alloc] init];
[newsParser getData:0:nil:0:0];
[newsParser release];
或者我必须在其他类的.h文件中声明一个实例..像这样
WebServicesiPhone *newsParser;
并在方法文件中分配..如果我使用此方法,我必须在使用后释放该对象.....
newsParser = [[WebServicesiPhone alloc] init];
答案 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它是不正确的内存管理。