delegateは基本的にretainすべきではありません。propertyならassignで定義するべきです。retainの場合、具体的にどういう問題があるのかをNSURLConnectionを例に説明します。 NSURLConnectionはdelegateをretainしている NSURLConnectionはSDKのクラスですが、例外的にinitメソッドの引数で受け取るdelegateをretainしています。 NSURLConnectionは通信処理を非同期で行います 通信処理の要所要所でdelegateのメソッドを呼び出します(connection:didReceiveData:など) このときdelegateがメモリから消えていては困るのでNSURLConnectionはdelegateをretainしています NSURLConnectionが通信処理を終えてdelegate