getData():
In most cases, this is the method you should use. Of the two options, this one is actually faster and more efficient. If you have no need to modify the output, and just want to display the value, use getData(). However, there are attributes that may not work properly with getData() such as the product price. Though I haven’t tested it yet, getData(‘name’) will most likely end up producing different results than getName().
getAttributeName()
You should really only use this method if you are needing to override the method in your block to add functionality to how the data is displayed/formatted. Magento needs to take some additional steps in rendering the data when you use this method, so it is a slightly slower process than displaying data using getData(). So, by using $_product->getName(), I am able to add a function to the product view block for example to modify the data before it is output to
Some details:https://stackoverflow.com/questions/3541273/magento-getsku-or-getdata-sku-returns-empty-string