English 中文(简体)
何时何地释放物体的问题
原标题:Question on when and where to release an object

我有几个地方需要显示警惕,以同样的方式处理解雇行动,即把他们带往同一观点的控制人员。 在所有这些地方,我不是重复具体的警示守则,而是另设一个类别,如:


AlertUtility.h:
@interface AlertUtility : NSObject {
}
- (void) displayAlert;
@end

AlertUtility.m:
@implementation AlertUtility {
- (void) displayAlert {
   UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:... message:... 
      delegate:self cancelButtonTitle:... otherButtonTitles:nil] autorelease];
   [alert show];
}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
   // Create another view controller and display its views
   [self release] // Release current object because I m not releasing it where I create it
}

}

在我需要利用这一警示的地方(即在我的《意见》中),我有:


MyViewController.m:
AlertUtility *utility = [[AlertUtility alloc] init];
[utility displayAlert];

As you can see, I am not releasing the utility object here (which I should since I own it), but rather in the didDismissWithButtonIndex method of the AlertUtility class. I am clearly missing something here.

我曾尝试自动解救该用途物体,但随后,在将McDismissWithButtonIndex方法提上该用途物体时,该物体已经释放(因为自动释放)。

我在尝试展示 静态警报方法(并用<代码>[AlertUtility showAlert];,但此后从未使用过DismissWithButtonIndex。

我是否应该像现在一样,从DismissWithButtonIndex方法中释放目前的物体,或者在我的《意见》主计长中(不为目前这一类别创造警觉性财产)释放该物体?

感谢!

EDIT Should I use the Singleton pattern instead maybe?

最佳回答

电话[自发]<<> > /code>是一个大的禁,因为没有任何物体了解其他物体指的是什么。 保留制度旨在确保,如果奥贝贾亚需要奥比,奥贝吉B将留任,直到奥比阿不再需要。 如果ObjB释放自己,整个系统就会解体。

在这种情况下,UIAlert 保留<代码> 请注意。 请注意<>。 UIAlert

因此,罚款:

AlertUtility *utility = [[AlertUtility alloc] init];
[utility displayAlert];
[utility release];   // released here, but still alive

如果<代码>AlertUtility的物体在释放之前仍活着,则不会成为问题。 释放必定会杀物体。 它只是说,发送释放信息的物体不再需要释放的物体。 每个保留物体都有责任将所有保留(包括诸如<代码>in/code>等默示保留)与释放保持平衡。 过去,保留物体没有兴趣,对系统是否保持释放物体没有责任。

毕竟,任何单一物体均可由每一方都不知道的多个保留物体保留。 在此情况下,见《意见汇编》一带<条码>。 <>tAlert再次将其保留,作为代表( Edit:<>>>指定><>>>> > > 只有当AlertUtility的>需要时,该代码将保持活力,反之亦然。

Since www.un.org/chinese/sc/presidency.asp IDWindow,如果显示,这意味着 Alerttility的物体将一直活下去,直至< UIAlert被弃。 (Edit:这只适用于意见,而不是警觉性代表)

You通常不会有UIAlert 代表,其存在完全取决于UIAlert<>/code>。 通常情况下,<代码>UIAlert代表是引起警示的观察控制员。 这样,你就不必担心这位代表在完成与警示有关的任务之前死亡。

问题回答

你们可以这样做:

void displayAlert(NSString *title, NSString *message)
{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
        message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];
}

或者说:

#define MY_ALERT(TITLE, MESSAGE) 
[[[[UIAlertView alloc] initWithTitle:TITLE 
                             message:MESSAGE 
                            delegate:nil 
                   cancelButtonTitle:@"OK" 
                   otherButtonTitles:nil] autorelease] show]

然后写:

MY_ALERT(nil, @"Press, OK!");

虽然我同意将其释放为“别处”,但你的工作方式很复杂,我试图避免这种情况。 您可以采取以下做法:

// AlertUtility.h:
@interface AlertUtility : NSObject {
}
- (void) displayAlert;
@end

// AlertUtility.m:
@implementation AlertUtility {
- (void) displayAlert {
   UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:... message:... 
      delegate:self cancelButtonTitle:... otherButtonTitles:nil] autorelease];
   [alert show];
   [self retain];   // explicitly retain this (self) object
}

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex {
   // Create another view controller and display its views
   [self release] // Release current object because you retained it earlier here
}

}

后来:

 // MyViewController.m:
    AlertUtility *utility = [[AlertUtility alloc] init];
    [utility displayAlert];
    [utility release];   // released here, but still alive

Edit: 解除了警示中的释放,因为它是自动释放的。





相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。