Iphone在initWithNibName中分配内存

Iphone在initWithNibName中分配内存,iphone,memory-management,Iphone,Memory Management,如果我不想再为一个在initWithNibName方法中设置为属性的数组分配内存(即使该视图是弹出的,然后再次被推送),那么为该数组分配内存是否正确 谢谢好吧,如果一个视图显示然后隐藏,它将收到一个initWithNibName和一个发布;所以你应该这样做: - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { yourArray = [[NSArray alloc] init]

如果我不想再为一个在initWithNibName方法中设置为属性的数组分配内存(即使该视图是弹出的,然后再次被推送),那么为该数组分配内存是否正确


谢谢

好吧,如果一个视图显示然后隐藏,它将收到一个
initWithNibName
和一个
发布
;所以你应该这样做:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   yourArray = [[NSArray alloc] init];
}

- (void) dealloc
{
   [yourArray release];
   [super dealloc];
}
self.myArray = [NSArray array];

无论视图控制器的寿命有多短,它在被解除时仍然会收到一个释放,这最终会导致调用
dealloc

好吧,如果一个视图显示然后隐藏,它将同时收到
initWithNibName
释放
;所以你应该这样做:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   yourArray = [[NSArray alloc] init];
}

- (void) dealloc
{
   [yourArray release];
   [super dealloc];
}
self.myArray = [NSArray array];

无论视图控制器的寿命有多短,它都会在被解除时得到释放,这最终会导致调用
dealloc

它是正确的,只确保在dealloc中释放它。确保在alloc initing时不使用setter,而是应直接alloc init实例变量:

_myArray = [[NSArray alloc]init];
如果只想通过property方法,请执行以下操作:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   yourArray = [[NSArray alloc] init];
}

- (void) dealloc
{
   [yourArray release];
   [super dealloc];
}
self.myArray = [NSArray array];
再说一次,别忘了在dealloc中发布它:

 -(void)dealloc
{
    [_myArray release];
    [super dealloc];
}

它是正确的,只需确保在您的dealloc中释放它。确保在alloc initing时不使用setter,而是应直接alloc init实例变量:

_myArray = [[NSArray alloc]init];
如果只想通过property方法,请执行以下操作:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
   yourArray = [[NSArray alloc] init];
}

- (void) dealloc
{
   [yourArray release];
   [super dealloc];
}
self.myArray = [NSArray array];
再说一次,别忘了在dealloc中发布它:

 -(void)dealloc
{
    [_myArray release];
    [super dealloc];
}

为什么我不能用我的二传手?谢谢,因为如果您有“retain”(可能有)或“copy”属性,那么如果您在alloc initing时使用setter,那么这个对象将被保留两次:1。在alloc方法中。2.在你的二传手。这将导致内存泄漏,因为您只调用了一次“release”。(您应该只调用release一次。)因此,如果您想使用setter,请获取一个autoreleased对象。为什么我不应该使用setter?谢谢,因为如果您有“retain”(可能有)或“copy”属性,那么如果您在alloc initing时使用setter,那么这个对象将被保留两次:1。在alloc方法中。2.在你的二传手。这将导致内存泄漏,因为您只调用了一次“release”。(并且应该只调用release一次。)因此,如果要使用setter,请获取一个自动释放的对象。