В любом случае утечки памяти нет. Второе решение просто влияет на результат переменной, тогда как первое не сохраняет результат, но эффект тот же.
Как следует из соглашения о присвоении имен, учитывая имя scheduledTimerWithTimeInterval:...
метода, вы знаете, что он вернет автоматически выпущенный объект (или, если быть более точным, он вернет объект, владельцем которого вы не являетесь, и для которого вам не нужно будет отправлять релиз самостоятельно)
Вам не нужно хранить ссылку на созданный NSTimer
, если не нужно: таймер будет запланирован на RunLoop (и это RunLoop, который будет сохранять его до тех пор, пока он не будет использован, и освободить его, когда закончите, так что вам не нужно беспокоиться), так что он будет жить сам по себе.
Но , если вы не сохраните возвращенную NSTimer
в переменной, как во втором коде, вы не сможете отменить таймер, если захотите. Особенно, если вы установите повторяющийся таймер, вам нужно будет сохранить его в переменной, чтобы вы могли получить к нему доступ позже, особенно для отправки ему сообщения invalidate
, чтобы его можно было отменить.