Thanks a lot, Jordan.

> 在 2017年12月15日,上午2:08,Jordan Rose <jordan_r...@apple.com> 写道:
> 
> 
> 
>> On Dec 13, 2017, at 23:05, 吴君恺 via swift-users <swift-users@swift.org 
>> <mailto:swift-users@swift.org>> wrote:
>> 
>> Hello community, 
>> 
>>      I just encountered a pretty weird behavior when I subclass  
>> `UINavigationController` without overriding any initializers.
>> 
>> Simple Code:
>> 
>> import UIKit
>> 
>> class MyViewController: UINavigationController {
>>   
>>   let value: Int = {
>>     print("member init")
>>     return 3
>>   }()
>> }
>> 
>> let _ = MyViewController(rootViewController: UIViewController())
>> 
>> output is:
>> 
>> member init
>> member init
>> 
>> In fact any member variables declared in this subclass is initialized twice 
>> but deinitialized only once.
>> This phenomenon only appears when using `init(rootViewController:)`. 
>> 
>> CMIW, It looks like Swift somehow treat this initializer as a designated 
>> initializer, rather than a convenience one. 
>> 
>> Any Ideas?
> 
> Your analysis is correct. The problem is that UINavigationController's header 
> file doesn't properly declare which initializers are designated and which are 
> convenience. Fortunately, you're not the first to notice this; it's tracked 
> by the UIKit folks as rdar://problem/27255526 <rdar://problem/27255526>. I'll 
> poke them about it.
> 
> Thanks for bringing it up!
> Jordan
> 

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users

Reply via email to