Почему XCode сообщает о «определенном, но не используемом» предупреждении для моей переменной класса? - PullRequest
5 голосов
/ 22 октября 2009

Я получаю предупреждение об этой строке в моем заголовке, но я использую переменную класса в своей реализации (как в методах класса, так и в методах экземпляра):

#import <UIKit/UIKit.h>

static NSMutableArray *classVar; // Xcode warning: 'classVar' defined but not used

@interface MyViewController : UIViewController {

Ответы [ 4 ]

14 голосов
/ 22 октября 2009

Эта переменная не является переменной класса / экземпляра. Каждый раз, когда файл заголовка включается в файл .m, компилятор создает новую статическую переменную, область действия которой ограничена файлом, включающим этот заголовок. Если вы пытаетесь получить переменную уровня класса, переместите объявление в начало соответствующего файла .m.

6 голосов
/ 22 октября 2009

A static переменная имеет область видимости файла. Поскольку XCode не может найти переменную, используемую в этом файле, он видит неиспользуемую переменную. Если вы действительно хотите, чтобы переменная была доступна из всей вашей программы, сделайте это объявлением переменной extern и определите ее в своей реализации. Если он предназначен только для этого класса, просто переместите статическую переменную в файл реализации.

3 голосов
/ 22 октября 2009

Вы поместили classVar вне определения интерфейса. Это заставит компилятор думать, что вы объявляете глобальную переменную, и, поскольку это выглядит как заголовочный файл (.h), он также будет создан во всех файлах, включая этот заголовочный файл. Я предполагаю, что предупреждение приходит при компиляции файла, отличного от MyViewController.m, который включает этот заголовочный файл.

EDIT Мое предложение состоит в том, чтобы вы переместили classVar в файл .m для MyViewController (неправильно интерпретировал то, что вы делали после первого)

0 голосов
/ 28 июня 2013

Вот правильный способ сделать это:

В .ч

extern NSString *const DidAddRecordNotification;

В .м

NSString *const DidAddRecordNotification = @"DidAddRecordNotification";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...