我正在尝试编写一个快捷方式来初始化我的自定义 UIView 的属性,而不是逐行写出每个属性,但不幸的是它没有按我预期的方式工作。
// .h file
@property (nonatomic, strong) UIView *view1;
@property (nonatomic, strong) UIView *view2;
@property (nonatomic, strong) UIView *view3;
@property (nonatomic, strong) UIView *view4;
// .m file
UIView *views[] = { self.view1, self.view2, self.view3, self.view4 };
for ( int i = 0; i < sizeof(views) / sizeof(views[0]); i++ ) {
views[i] = [[UIView alloc] initWithFrame:self.frame];
}
NSLog( @"%@", self.view1 ); // prints null
C 风格的数组不允许这样做吗?
最佳答案
您对 views[]
的初始化看起来不错,但一旦您这样做了
views[i] = ...
您只是覆盖了数组的内容。但是,您没有初始化self.view1
、self.view2
等。尝试
NSLog(@"%@", views[0]);
明白我的意思。
我不会像下面那样做,但你可以可能会做(未经测试):
UIView **views[] = { &self.view1, &self.view2, &self.view3, &self.view4 };
for (int i = 0; i < (sizeof(views) / sizeof(views[0]); ++i)
{
*views[i] = [[UIView alloc] initWithFrame: self.frame];
}
NSLog(@"%@", self.view1);
我宁愿一个一个初始化,不用数组。我看不出使用数组和循环有任何优势。
关于ios - 从属性指针数组初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24726628/