• 徐振洲
    2019-05-13
    关于 为什么没有调用 init 的问题,我也是用单一模板创建的工程,但是我工程的info.plist 中是默认配置了storyboard 的。这会对我们造成误解。检查了很多遍工程也没发现问题,最后看了评论,搜索如何去除storyboard 才解决。评论里面的“看demo”、“断点时机不对”我觉得回复的有些敷衍了。
    
     6
  • 孙洋
    2019-04-21
    完整的生命周期应该是从生成到销毁吧? 这个只是生成应该不能称为完整的生命周期。

    作者回复: 是的,完整的生命周期其实还包括很多。在课程里知识简单的介绍让大家有个初步的了解。当然在课程中“完整”描述的不是特别准确

    
     2
  • 🐜
    2019-05-07
    老师好,有两个问题
    1. 为啥在init方法里要判断self?
    2.为啥重写生命周期方法里要调super方法?

    作者回复: 1. 防止父类初始化失败,导致整个逻辑的错误,所以要判断是否已经正确的alloc分配内存以及是否初始化成功。对于alloc方法来说系统是有可能失败的,同时init函数如果在需要传参数的时候,传入错误的参数也可能返回nil。
    2. 生命周期相关的方法,其实我们都是在 override,如果我们不调用super,那么在super中相关方法内的实现就无法执行,只会执行我们override的方法。根据文档“If you override this method, you must call super at some point in your implementation.” 说明UIViewController自身在这些函数中肯定是有逻辑的,所以override的时候需要调用super。

     1
     1
  • AbnerZhang
    2019-04-19
    老师,loadview方法不属于vc的生命周期吗,能讲一讲这个方法吗

    作者回复: 这个是属于的,其实生命周期还有很多方法的调用,没有一一的详细介绍,loadView最常见的是和viewDidLoad混淆,可以通过这两个关键字搜索下 相关的讲解有很多。

    简单的来说 loadView 就是创建vc中那个默认view的,在这个方法中可以创建自定义的view,比如我可以让vc的默认view是webview或者scrollview,就可以在这个方法中进行创建。viewDidLoad是view创建完毕之后调用,在这里我们通常加上子view等。

    
     1
  • 九三
    2019-05-02
    通过sb加载 执行initWithCoder 通过代码加载执行init
    
    
  • CodeFuture
    2019-04-26
    断点添加没有问题,完全按着老师的模板。还是无法调用- (instancetype)init
    我查了下资料,说是用storyboard创建的ViewController,初始化时不会调用- (instancetype)init,而是调用- (instancetype)initWithCoder,并且- (void)dealloc 也会有所不同。
    (我是直接用Xcode单一页面模板创建的工程)

    作者回复: 是的 在课程中为了方便讲解 没有使用storyboard 在window那节课中也会讲解如何取消storyboard哈

    
    
  • CodeFuture
    2019-04-23
    运行时候,无法进入 init “断点”,是什么情况呢?
    @implementation ViewController

    - (instancetype)init {
        self = [super init];
        if (self) {
            
        }
        return self;
    }

    @end
    展开

    作者回复: 我这边用上传的Demo是可以的,确定下断点添加的时机,加好之后在重新运行下。

     1
    
  • memoryshy
    2019-04-19
    为啥我的断点是直接跳到viewWillAppear?都不经过init

    作者回复: viewController的初始化是在最开始的函数中调用的,有可能你断点加的晚了,可以先加断点之后在重新执行下试试。
    如果还是不行,可以对比Demo看下具体哪里的写法不同

     1
    
我们在线,来聊聊吧