在哪里初始化 MutableArray?
Where to init MutableArray?
我已经尝试在 initWithFrame 中 init/alloc 它,但是对象不会被添加。
它只在我调用的这个方法中有效,但每次用户刷新视图时我都会调用这个方法,所以它 init/alloc 一百次。
不确定为什么它不能只在 initWithFrame 中工作。
我需要知道初始化和添加的正确方法..!
-(void)queryParseMethod {
self.imageFilesArray = nil;
self.imageFilesArray = [[NSMutableArray alloc]init];
[self.imageFilesArray addObjectsFromArray:objects];
if (!error) {
for (PFObject *object in objects) {
int index = (int)[self.favArray indexOfObject:[object objectId]];
[self.imageFilesArray replaceObjectAtIndex:index withObject:object];
}
[self.favCV reloadData];
}}
为什么不只是:
if (self.imageFilesArray == nil) {
self.imageFilesArray = [[NSMutableArray alloc] init];
[self.imageFilesArray addObjectsFromArray:objects];
}
并确保 imageFilesArray
是强 属性。
您最有可能的问题是 initWithFrame:
没有被调用。如果这个视图来自故事板,那么你需要把它放在 awakeFromNib
中,因为 storyboard/nib-loaded 对象使用 initWithCoder:
初始化,而不是它们指定的初始化程序。
您通常不想尝试在 initWithCoder:
中进行初始化,因为它被调用得太早了。 awakeFromNib
在您所有的 IBOutlets 都被分配后被调用。
对于有经验的开发人员来说,像这样将初始化分解成自己的方法是很常见的:
- (void)setup {
// Do your setup here
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setup];
}
}
- (void)awakeFromNib {
[self setup];
}
这样做可以确保对象在任何一种情况下都被初始化。
另一种常见的解决方案是延迟初始化,特别是对于 NSMutableArray
:
@interface MyView
@property (nonatomic, readonly, strong) NSMutableArray *imageFilesArray;
@end
@implementation MyView
- (NSMutableArray *)imageFilesArray {
if (_imageFilesArray == nil) {
_imageFilesArray = [NSMutableArray new];
}
return _imageFilesArray;
}
我已经尝试在 initWithFrame 中 init/alloc 它,但是对象不会被添加。
它只在我调用的这个方法中有效,但每次用户刷新视图时我都会调用这个方法,所以它 init/alloc 一百次。 不确定为什么它不能只在 initWithFrame 中工作。
我需要知道初始化和添加的正确方法..!
-(void)queryParseMethod {
self.imageFilesArray = nil;
self.imageFilesArray = [[NSMutableArray alloc]init];
[self.imageFilesArray addObjectsFromArray:objects];
if (!error) {
for (PFObject *object in objects) {
int index = (int)[self.favArray indexOfObject:[object objectId]];
[self.imageFilesArray replaceObjectAtIndex:index withObject:object];
}
[self.favCV reloadData];
}}
为什么不只是:
if (self.imageFilesArray == nil) {
self.imageFilesArray = [[NSMutableArray alloc] init];
[self.imageFilesArray addObjectsFromArray:objects];
}
并确保 imageFilesArray
是强 属性。
您最有可能的问题是 initWithFrame:
没有被调用。如果这个视图来自故事板,那么你需要把它放在 awakeFromNib
中,因为 storyboard/nib-loaded 对象使用 initWithCoder:
初始化,而不是它们指定的初始化程序。
您通常不想尝试在 initWithCoder:
中进行初始化,因为它被调用得太早了。 awakeFromNib
在您所有的 IBOutlets 都被分配后被调用。
对于有经验的开发人员来说,像这样将初始化分解成自己的方法是很常见的:
- (void)setup {
// Do your setup here
}
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
[self setup];
}
}
- (void)awakeFromNib {
[self setup];
}
这样做可以确保对象在任何一种情况下都被初始化。
另一种常见的解决方案是延迟初始化,特别是对于 NSMutableArray
:
@interface MyView
@property (nonatomic, readonly, strong) NSMutableArray *imageFilesArray;
@end
@implementation MyView
- (NSMutableArray *)imageFilesArray {
if (_imageFilesArray == nil) {
_imageFilesArray = [NSMutableArray new];
}
return _imageFilesArray;
}