Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 解释awakeFromNib和initwithFrame:用法_Objective C - Fatal编程技术网

Objective c 解释awakeFromNib和initwithFrame:用法

Objective c 解释awakeFromNib和initwithFrame:用法,objective-c,Objective C,我正在浏览斯坦福iPhone开发人员在iTunes上的课程,并在第5课中遇到了这个问题 我们正在努力确保在设备旋转时重新绘制。 我有两个与此相关的问题: 从NIB中唤醒的是什么?在代码的其余部分中没有对该方法的调用。它是如何触发的 initwithFrame:中的代码做什么 首先,initWitFrame将初始化您在给定矩形空间中使用的内容 CGRect是坐标位置。阅读CGRectMake。基本思想是CGRectMake(CGFloat x,CGFloat y,CGFloat width,CG

我正在浏览斯坦福iPhone开发人员在iTunes上的课程,并在第5课中遇到了这个问题

我们正在努力确保在设备旋转时重新绘制。 我有两个与此相关的问题:

  • 从NIB中唤醒的
    是什么?在代码的其余部分中没有对该方法的调用。它是如何触发的
  • initwithFrame:
    中的代码做什么

  • 首先,initWitFrame将初始化您在给定矩形空间中使用的内容 CGRect是坐标位置。阅读CGRectMake。基本思想是
    CGRectMake(CGFloat x,CGFloat y,CGFloat width,CGFloat height)


    对于问题的后半部分,
    NSBundle
    在完成加载nib时调用check

    awakeFromNib

    实际上,在初始化视图时,您的代码可以采用两种不同的代码路径,这取决于它是从nib加载的还是在运行时创建的

    • 如果它是从nib加载的,则加载的一部分将通过调用
      initWithCoder:
      对其进行初始化,然后在连接所有插座后调用
      awakeFromNib

    • 如果以编程方式创建视图,则可以使用
      initWithFrame:
      对其进行初始化(并且不会调用
      awakeFromNib
      ,因为它不是从nib加载的)


    这个问题在Quora有一些答案:和。谢谢。我现在清楚地知道了从NIB醒来的事。那么self=。。。什么是自我?什么是超级?我们在这里得到的是谁的super?self是指向当前对象的指针(它是为每个非静态方法隐式定义的)。super允许您调用对象的超类对当前方法的实现。
    self=[super init…]
    是如何调用超类的初始值设定项的约定(因为它可能返回不同的对象)。这些是Objective-C和面向对象编程中的基本概念,但有点超出了原始问题的范围。
    -(void)setup 
    {
          self.contentMode = UIViewContentModeRedraw;
    }
    
    -(void)awakeFromNib
    {
        [self setup];
    }
    
    -(id)initWithFrame:(CGRect)frame
    {
         self=[super initWithFrame:frame];
         if (self) {
            [self setup];
         }
         return self;
    }