A typical UK credit card will have a loading of approx 2.75%. Debit cards vary, you'd need to ask your bank.
Taking cash out and exchanging it there won't give you a significantly better rate and carries a security risk (not just because it's SA .... the same applies anywhere).
If you want to budget up front for the costs I would suggest you do a bank transfer or get a draft drawn up by your UK bank in ZAR and take with you. That is likely to be the cheapest option but it means paying a lump sum, unless you split the payments, but then your transaction fees become greater.
Guess what .... however you do it the banks make the money.
The only other option is to get someone in SA whom you trust, and who needs sterling, to do a swap.