Ответ 1
Нет разницы между
@implementation ClassA
static NSString *str = nil;
.....
@end
и
static NSString *str = nil;
@implementation ClassA
.....
@end
Они работают одинаково...
Статические переменные помогают классу объект больше функциональности, чем просто то из "factory", производящего экземпляры; он может полный и универсальный объект в своем Права собственности. Объект класса можно использовать для координации экземпляров создает, распределяет экземпляры из списки уже созданных объектов или управлять другими процессами, необходимыми для приложение. В случае, когда вы нужен только один объект определенного класса, вы можете поместить все объекты состояние в статические переменные и использовать только методы класса. Это экономит шаг выделения и инициализации экземпляр.