1

我试图更好地理解实例化过程。我知道有些类需要先分配和初始化(我必须创建类的对象)才能使用它们,例如 NSMutableArray。但是,我遇到了在使用它们之前不需要实例化的类,例如 NSDate 和 UIImage。

例如,在我可以使用它之前,我总是像这样实例化 NSMutableArray:

NSMutableArray *myArray = [[NSMutableArray alloc]init];

使用 UIImage 我可以跳过实例化并执行以下操作:

UIImage *i = [UIImage imageNamed:@"image.png"];

对于何时可以只使用类而不实例化以及何时必须实例化,是否有任何规则或提示?我想看看是否有一种快速的方法来了解这一点。

谢谢!

4

2 回答 2

1

一般来说,我自己的经验法则是,如果对象仅在该方法内生效并且不在该方法的范围之外使用,我将在实例化新对象之前为自动释放的对象使用创建 API。

但是,如果您需要在方法范围之外的任何其他位置访问该对象,则必须实例化它并保留内存并保留。

在上面的示例中,如果您将“ UIImage * i”放入图像视图中或仅在一个方法中对其进行处理,那么“ imageNamed”是非常合适的。

如果您需要为UIImage * i方法范围之外的任何内容保留“”,请改用它的指定初始化程序。

于 2013-03-22T05:28:17.217 回答
1

无论哪种情况,您总是在实例化一个对象。只是UIImage该类提供了一些静态的便利方法,隐藏了相当丑陋的 alloc/init 过程。Even NSMutableArrayhas [NSMutableArray arrayWithCapacity:numItems]which 仍然在其中执行“alloc”,“init”,但也设置了初始容量(出于性能原因)。最好的方法是仔细阅读文档,寻找静态类方法,或者查看自动完成是否有任何以你正在制作的东西开头的方法,例如[UIImage image...][NSDate date...]

于 2013-03-22T05:31:20.747 回答