我如何懒洋洋地初始化按钮的NSMutableArray?我做这样的事情:
-(NSMutableArray *)roasteryButtons
{
if(!roasteryButtons)
{
roasteryButtons = [ NSMutableArray new];
//other code
}
return roasteryButtons;
}
并且不知道如何调用这个懒惰的初始化程序?即我需要初始化数组,以便我可以为数组中的每个按钮设置框架
答案 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];
这将返回你的对象。
希望这有帮助。