Using instancetype as the sharedInstance return type prevents having to cast this return for direct use of the properties and methods. For example, with this change, the following is possible: [SQLClient sharedInstance].timeout = 3; Without the change, you'd have to first save it to a variable or do the following ((SQLClient*)[SQLClient sharedInstance]).timeout = 3;
Using instancetype as the sharedInstance return type prevents having to cast this return for direct use of the properties and methods. For example, with this change, the following is possible: [SQLClient sharedInstance].timeout = 3; Without the change, you'd have to first save it to a variable or do the following ((SQLClient*)[SQLClient sharedInstance]).timeout = 3;