Может класс содержать статический объект в target-c - PullRequest
0 голосов
/ 16 декабря 2011

Просто любопытно.

Такие вещи, как

ClassName * singleton

Здесь статично в том смысле, что все члены класса разделяют его

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Они точно могут! Объявите ваши статические переменные вне блока реализации в файле .m. Я делаю это все время, когда создаю синглтоны.

--- MySingleton.h ---

@interface MySingleton : NSObject
...
@end


--- MySingleton.m ---

#include "MySingleton.h"

static MySingleton *sharedSingleton = nil

@implementation
...
@end
1 голос
/ 16 декабря 2011

В дополнение к ответу Эйтана: хорошее место для создания экземпляра sharedSingleton - метод инициализации class . Он вызывается один раз перед отправкой вашего класса, это его первое сообщение (например, alloc) во время выполнения.

Например:

static MySingleton *sharedSingleton = nil;

@implementation YourClass

+(void) initialize // Note the plus sign!
{
    if (!sharedSingleton)
        shardSingleton = [[MySingleton alloc] init];
}

// etc. 

@end
1 голос
/ 16 декабря 2011

Чтобы добавить к ответу, который у вас уже есть - Да, вы можете.

Вы можете иметь статические переменные, которые видны всем объектам класса, поместив их вне блока реализации.

Вы можете иметь статические переменные, которые видны только внутри метода для всех объектов класса, объявив статическую переменную внутри метода.Если вы хотите увидеть пример этого, взгляните на шаблон, сгенерированный XCode для метода источника данных таблицы tableView:cellForRowAtIndexPath: Вверху обычно есть объявление вроде:

static NSString *cellIdentifier = @"cellIdentifier";

Thisявляется статическим методом, но он доступен только в этом методе для других объектов этого класса.Это дает вам две вещи.Во-первых, немного более эффективное использование памяти при наличии одного хранилища для постоянного элемента.Во-вторых, инкапсуляция поддерживается наличием вспомогательной переменной, видимой только в методе, который использует эту переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...