What is the difference between a weak and strong reference in iOS or Swift, and when would you use each?