Object created through protocol not released if protocol tagged with @objc

Originator:Antonio.Cabezuelo
Number:rdar://34993758 Date Originated:
Status: Resolved:
Product:Swift Product Version:
Classification:Bug Reproducible:Always
 
Summary:
Given a protocol and a class that implements this protocol. Creating an object casting the class to the protocol and invoking init on the protocol, creates an object that is never released if the protocol is tagged with @objc

Steps to Reproduce:
Executing the following code:

@objc
protocol P: class, NSObjectProtocol {
    init(name: String)
    var name: String { get }
}

class A: NSObject, P {
    required init(name: String) {
        self.name = name
        super.init()
    }
    
    deinit {
        print("A deinit")
    }

    let name: String
}

let c: AnyClass = A.self

if let proto = c as? P.Type {
    print("Proto")
    _ = proto.init(name: "Hi")
}


Expected Results:
Console show:
Proto
A deinit

Actual Results:
Console show:
Proto

Version/Build:
iOS 11.0

Notes:
If the protocol is not tagged with @objc the console shows the expected results.
Comments
No Comments

Comments


Please note: Reports posted here will not necessarily be seen by Apple. All problems should be submitted at bugreport.apple.com before they are posted here. Please only post information for Radars that you have filed yourself, and please do not include Apple confidential information in your posts. Thank you!