我如何懒惰初始化NSMutableArray?

时间:2011-07-28 08:39:15

标签: iphone objective-c ios

我如何懒洋洋地初始化按钮的NSMutableArray?我做这样的事情:

-(NSMutableArray *)roasteryButtons
 {
     if(!roasteryButtons)
     {
     roasteryButtons = [ NSMutableArray new];
     //other code
     }
return roasteryButtons;
 }

并且不知道如何调用这个懒惰的初始化程序?即我需要初始化数组,以便我可以为数组中的每个按钮设置框架

4 个答案:

答案 0 :(得分:2)

我猜你知道什么时候打电话给这个方法吧?

第一件事是你不应该使用“new”方法,而应该使用[[NSMutableArray alloc] init]:你应该看看NSArray可用的所有现有[Init]方法:有一堆它们(有能力,有物品等......)

无论如何,你应该为你的方法[roasteryButtons]添加一些参数:有助于方法知道的参数,例如要创建多少个按钮,它们必须显示的帧是什么等等。所以这将是有点像

-(NSMutableArray *)roasteryButtonsWithFrame:(*Frame) andNumbersOfButtons:(int)

例如......

或者代替参数,您可以将引用传递给能够给出这些问题答案的委托(多少个按钮,我的框架和界限是什么等)所以在这种情况下,该方法看起来像:

-(NSMutableArray *)roasteryButtonsWithDelegate:(id) 

(此委托应实现您将创建的协议,其中包含委托必须响应的不同方法。即[howManyButtons]等方法...)

答案 1 :(得分:2)

你所做的是正确的。不是在类的init方法中分配数组,而是仅在需要时分配数组。因此,它用于懒惰分配。

在课堂上,只要你想要数组,就可以打电话,

NSMutableArray *arr = [self roasteryButtons];

还将头文件中的方法声明为-(NSMutableArray*)roasteryButtons;

如果你想在其他类中引用数组,那么调用就像,

[classObj roasteryButtons];

我已将其显示为实例方法。如果你想这样,你也可以将它声明为类方法。

并在-(void)dealloc方法中发布。

答案 2 :(得分:1)

Lazy初始化的完美方式如下

.h文件中的

将NSMUtableArray声明为属性,如下所示

@property(nonatomic,strong)NSMutableArray * array;

现在在.m文件中合成它并在getter中进行延迟初始化,如下所示:

@synthesize array = _array;

(NSMutableArray *)数组 {   (!_array)_array = [[NSMutableArray alloc] init]; //此行称为延迟初始化..此行将在程序//运行时创建MutableArray。

返回_array }

现在回答我们需要的原因是,如果没有创建NSMutableArray,那么它会在程序运行时创建它,这样你的应用程序就不会崩溃。

答案 3 :(得分:0)

您可以将方法设为类方法:

+(NSMutableArray *)roasteryButtons {
通过这种方式,您可以像这样调用它:

[MyRoasteryButtonClass roasteryButtons];

这将返回你的对象。

希望这有帮助。