Your best option to get cash is to withdraw from local ATMs using a fee-free US debit card (e.g., a Schwab card or similar). Bring some USD only for use as a backup.
One thing to keep in mind is that foreign debit cards may not work at some Mexican ATMs. If you stick to the major commercial banks, you should be fine, but if you try the card at a bank like Azteca, Elektra, or whatever, it probably won't connect to the international network. If your ATM fees aren't reimbursed, I find that Banorte and Citibanamex seem to charge the lowest fees, while BBVA is absurdly high.
Also, don't pay/tip in dollars. This isn't Argentina. The peso is extremely stable, and it's just a pain for people to have to exchange currency, particularly small amounts.