You don't say in so many words, but the "idle high" suggests you mean a UART. UARTs a point-to-point connected to line-transceivers, like the ubiquitous but dated MAX232 (there are far better solutions nowadays). The line between microcontroller and transceiver will also be short; if there's distance to be bridged it will be between transceivers.
The controller's output is a push-pull.
The P-MOSFET will provide the high level, the N-MOSFET the low level. One of them must be active or the line level would float and be undefined (or defined by a load in the transceiver). Both are able to source/sink some current and will pull the line to the rails, so the signal shape will almost be ideal.
Which would be different if it were really TTL, as in your question (the microcontroller is HCMOS). TTL outputs are highly asymmetrical: they can only supply little current, typically 0.4mA. Sinking current is OK, at 8mA. The low source current may be a problem if the line has a high capacitance and is high speed. The low drive current means that the capacitance will only charge relatively slowly, and rising edges will be slow, which at high speed may cause serious signal distortion. TTL is never used for this.
Your question could also refer to a multidrop line, where several devices can talk. In that case you can't use the push-pull output: if one device would drive the line high while another drives it low we would have a short-circuit. Multidrop lines almost always use pull-up resistors to keep the line idle high. Then only a low level requires driving the line, and instead of the push-pull output we'll have an open-drain, with just the N-MOSFET. The line is now also driven asymmetrically: the pull-up resistor can only deliver little current, while the pull-down FET can drive the line fast to ground. High speed multidrop lines therefore put a limit to the pull-up resistors. An example is I2C.