Статическая переменная в ObjectiveC - PullRequest
0 голосов
/ 01 февраля 2012

Статические переменные - это переменные, которые статически размещаются во время компиляции. Я сомневаюсь, с какой целью некоторые переменные объявляются статически? Я не использовал статическую переменную в своем коде до сих пор. Из кода яблока http://developer.apple.com/library/ios/#samplecode/CryptoExercise/Introduction/Intro.html в securityWrapper.m есть строка

static SecKeyWrapper * __sharedKeyWrapper = nil; 

какая польза от статического размещения __sharedKeyWrapper здесь?

Я видел использование статического ключевого слова во многих кодах. Так что любезно объясните использование и преимущества, когда статическое ключевое слово.

Заранее спасибо.

Ответы [ 3 ]

1 голос
/ 01 февраля 2012

Этот глобальный файл представляет собой singleton , используемый для совместного использования экземпляра класса.

Причина, по которой он статичен в Objective-C, - внутренняя связь .На практике это означает, что переменную нельзя увидеть вне файла, в котором она объявлена. Если другой файл объявляет переменную с тем же именем, это две разные переменные.

Имейте в виду, что способ Objective-C экземпляры работают, экземпляр фактически не будет размещен автоматически.Скорее у вас есть указатель на экземпляр.Код все еще должен делать что-то вроде:

if ( !_sharedKeyWrapper ) {
    _sharedKeyWrapper = [[SecKeyWraper alloc] initBlahBlah];
}

Смотрите ссылки для получения дополнительной информации.

1 голос
/ 01 февраля 2012

Когда вы определяете новый класс объектов, вы можете решить, какой экземпляр переменные, которые они должны иметь. Каждый экземпляр класса будет иметь собственная копия всех переменных, которые вы объявляете; каждый объект управляет своим собственным данные.

Однако вы не можете прописывать переменные для объекта класса; имеются никакие "переменные класса" не соответствуют переменным экземпляра. Только внутренний структуры данных, инициализированные из определения класса, предоставляются для класс. Объект класса также не имеет доступа к переменным экземпляра. любых случаев; он не может их инициализировать, прочитать или изменить.

Следовательно, для всех экземпляров класса для совместного использования данных внешний какая-то переменная обязательна. Некоторые классы объявляют статические переменные и предоставить методы класса для управления ими. (Объявление статической переменной в том же файле, что и определение класса, ограничивает область его действия только class - и только часть класса, которая реализована в файле. В отличие от переменных экземпляра, статические переменные не могут наследоваться подклассы.)

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

0 голосов
/ 01 февраля 2012

Также статические переменные инициализируются один раз. Вы можете использовать статические переменные в рекурсивных вызовах. Простой пример факториала.

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