UIView的initWithFrame

时间:2015-11-10 12:16:24

标签: ios objective-c uiview

我在我的UIView中声明了一个属性,如下所示: @property (nonatomic, strong) NSMutableArray *finishedLines;

我使用初始化:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        //[self setFinishedLines:[[NSMutableArray alloc] init]];
        [self setBackgroundColor:[UIColor grayColor]];

如果我取消注释[self setFinishedLines..]

,会有什么不同

当我声明属性时,它是否已经初始化了?

如果我取消注释,我会得到不同的结果,但我不理解逻辑。

3 个答案:

答案 0 :(得分:3)

objective-c中的属性不会自动初始化。

你必须在构造函数中分配和初始化它(或使用new,这基本上是alloc和init的快捷方式)。

   self.finishedLines = [[NSMutableArray alloc] init]];

答案 1 :(得分:0)

不,它本身不会被初始化。您需要在需要时对其进行初始化。如果您确定在调用initWithFrame:方法时,您需要“取消注释”您的代码。

答案 2 :(得分:0)

此类属性的声明不会为其分配对象。它只是指向NSMutableArray的指针。其他对象可以使用它在NSMutableArray对象上设置UIView。但是你可能还需要在内部声明一个(你可以在你的init中做),如果你需要确保一个总是可以访问的。