Generally, in the delegate pattern you want the reference to be weak, because it refers to a delegate which is the strong property of another object. Since these are generally not owned by the object that has the delegate property (i in your example), you don't want to keep a strong reference to them. In fact, it is quite common that you would have an object, such as a window controller (or navigation controller in iOS) that owns an object (such as a control of some kind) whose delegate you want to set back to the window controller (or navigation controller).
In this case, you need the delegate reference to be weak in order to prevent a retain loop (otherwise the window controller owns a reference to the control which owns a reference to the window controller as the delegate).
So, in your above example, you would be better off exploring this concept by using a more real-world example where the delegate itself is retained by another object, which more closely mirrors the way that delegates are used in the wild.