Don't see the diferences between them.
generateAddress is used to deterministically generate an address from the index (e.g. you want to have the fifth address from your seed). You will use it if you want to show a list of transactions that have already been done, or to find your "old" addresses again.
getNewAddress will automatically cycle through indexes and will search for an address that has not been spent yet. You will use this if someone wants to send you some IOTA, to make sure to give him an address that has not yet been spent and therefore can be safely spent later (without key reuse).