2013-12-17 3 views
-3

У меня есть этот код:метод класса и мой массив

.h

@interface DetalhesPod : UIViewController { 
    NSString *linhaPod; 
} 

@property (nonatomic, strong) NSString *linhaPod; 

.m

+ (NSArray *)_tracks { 
    NSArray *arrTexto = [self.linhaPod componentsSeparatedByString:@"#"]; 
} 

Почему у меня есть проблемы с "+" в "self.linhaPod"? Если я ставлю «-» У меня нет проблемы:

- (NSArray *)_tracks { 
} 

Сообщение об ошибке: переменная экземпляра «linhaPod» доступ в методе класса ...

Благодаря

+2

Не вопрос Xcode. --- Теперь просто подумайте об этом. Не имеет смысла вызывать метод экземпляра 'self' из метода класса. Как метод класса узнает, какой конкретный объект (экземпляр) вызывает метод экземпляра? –

+0

так как я могу получить доступ к этой переменной «linhaPod» в классе «_tracks»? Возможно или нет? – eugui

+0

@userXXX Нет, вы не можете. –

ответ

0

Вы не можете ссылаться на свойство из статического или класса метода (в вашем случае, _tracks). Это связано с тем, что методы класса не работают с объектом, а понятие значения свойства объекта не имеет смысла, если у вас нет объекта. Методы класса могут использовать только другие методы класса и статические переменные из одного класса. Проверьте the Wikipedia article на статические методы (эта концепция является общей для многих языков программирования, включая Objective-C). Это фундаментальная концепция программирования и действительно стоит изучать.

+0

Правильно, за исключением метода класса Objective-C, это не то же самое, что и статический метод на других языках. C - эквивалент статических методов Objective-C. – jlehr

+1

@jlehr Не могли бы вы объяснить, что немного больше? Например, в чем разница между методом класса ObjC и статическим методом Java? Я специально говорил о статических функциях-членах, BTW. – Macondo2Seattle

+1

Методы класса в Objective-C отправляются с использованием того же механизма, что и методы экземпляра, другими словами, они динамически выглядят, поэтому они не являются статическими. Как следствие, они наследуются так же, как и методы экземпляра, и могут быть переопределены в подклассах. Обратите внимание, что 'self' и' super' видны в методах класса Objective-C, что не относится к статическим методам в Java. – jlehr

4

Что вы видите здесь, это разница между классом и экземпляром этого класса. Каждый экземпляр класса имеет свою собственную переменную экземпляра linhaPod - в одном экземпляре он может указывать на строку @"bob", а в другом - @"andy". Класс является самостоятельным. self в методе класса относится к самому классу, а не к любому экземпляру. Итак, что бы это означало для доступа к этой переменной из самого класса? Переменная экземпляра существует только в экземплярах (следовательно, почему она называется переменной ).

Смежные вопросы