When subclassing, the directive is that the designated initializer must call the initializer of the assigned superclass.
Another recommendation is that the subclass should override the assigned superclass initializer to invoke the newly assigned initializer.
If the UITableViewCell follows this guide (and it executes, I tested using the category), it overrides the designated superclass initializer ( UIView initWithFrame: to call the newly assigned initializer ( initWithStyle:reuseIdentifier: . Therefore, if you call initWithFrame: on a UITableViewCell , it will call initWithStyle:reuseIdentifier: which in turn will call initWithFrame: on super ( UIView ).
Therefore, this will require an additional method call, but ultimately it will go through initWithStyle:reuseIdentifier:
Again, it is best practice that the designated initializer must call the designated initializer of the superclass and any other initializer that is not the designated initializer must call the designated initializer. From the "Assigned Initializer" :
General principle . The designated initializer in the class must, via the super message, invoke the assigned initializer in the superclass.
The designated initializers are tied to each other with messages up to super, while the other initialization methods are tied to the assigned initializers via messages for themselves.
source share