目标c - int和char []在.h,生命周期中声明?

时间:2011-10-11 14:05:13

标签: objective-c

我已经为我的应用程序(分配,保留,发布等等)的记忆挣扎了一段时间,但是有些事我还没理解。

如果我在.h文件中声明:

int ex1;
char ex2[10];

这些变量的生命周期是多少?想象一下,我想在我的.m代码的不同部分使用这些变量,在methodA中我将分配一个值,而在methodB中,我将要读取它们。

我可以100%确定变量不会在我的.m的任何时刻发布吗?

由于

2 个答案:

答案 0 :(得分:1)

因为他们是原始人,是的。它们不会被保留或释放。如果要将它们声明为属性,则应将它们声明为:

@property (assign) int ex1;

@property (assign) char ex2[10];

然后在您的.m文件中@synthesise正常使用[myObject ex1][myObject ex2]

在Objective C中,这个想法非常简单 -

  • 如果您曾在某个对象上调用alloc,那么您有责任在其上调用release。
  • 如果您曾在某个对象上调用retain,那么您有责任在其上调用release。
  • 如果你想确保注意到其他人会从你身下释放它,而你没有分配,那么请在上面调用retain。

显然,这些规则适用于指向对象的指针,而不是像int或char这样的原语。

答案 1 :(得分:1)

您不应该在.h文件中声明变量,因为这会导致链接器错误。

而是你应该在.h文件中对它们进行外部声明,并在.c / .m文件中正确声明它们。例如:

// In the .h

extern int ex1;
extern char ex2 [10];

// In the .c/.m

int ex1;
char ex2;

原因是多个.c文件可以包含您的标题,并且您将拥有相同变量的多个定义。

另外,请记住Objective-C是C的严格超集。这意味着在C中工作的任何东西在Objective-C中都以相同的方式工作。您只需担心Objective-C对象的保留/释放/自动释放,基本上是使用此语法的任何内容:

@interface MyObject : NSObject
{
    // My vars
}

@end