Форум программистов, компьютерный форум CyberForum.ru

Разница между @property и объявлением переменной в классе хедера - Objective-C

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 56, средняя оценка - 4.66
MaXaS
 Аватар для MaXaS
10 / 10 / 0
Регистрация: 22.05.2011
Сообщений: 164
18.04.2012, 23:39     Разница между @property и объявлением переменной в классе хедера #1
В чем собственно разница между обьявлением переменной в теле класса в хедере, и использовании @property и @synthesize?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 23:39     Разница между @property и объявлением переменной в классе хедера
Посмотрите здесь:

Outlet, @property Objective-C
Objective-C Property класса
Objective-C @property (readonly)
Великие и ужасные @property Objective-C
В чем разница между @class и #import? Objective-C
Objective-C @property,@synthesize в Objective-C
@interface и @property Objective-C
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lexus_ilia
 Аватар для lexus_ilia
3045 / 920 / 34
Регистрация: 24.09.2008
Сообщений: 1,530
19.04.2012, 15:30     Разница между @property и объявлением переменной в классе хедера #2
Если переменная объявлена в теле класса, то она считается private переменной, т.е. прямого доступа из других классов к ней нет. Если же переменная объявлена через @property, то во-первых генерируется сеттер и геттер для данной переменной (конечно если Вы synthesize написали в implementation блоке), и во-вторых переменная будет доступна из других классов через "."
Также у @property есть такое предназначение как возможность расширения класса. Использование неименованых категорий в связке с @property дает возможность классу "добавить" переменных.
Как-то так.

Если изучаете эту тему, то обязательно посмотрите как пишутся сеттеры для property. Также следует изучить какие параметры могут быть и чем они отличаются atomic/nonatomic, retain, etc.
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
11.06.2012, 13:00     Разница между @property и объявлением переменной в классе хедера #3
Цитата Сообщение от lexus_ilia Посмотреть сообщение
Если переменная объявлена в теле класса, то она считается private переменной, т.е. прямого доступа из других классов к ней нет. Если же переменная объявлена через @property, то во-первых генерируется сеттер и геттер для данной переменной (конечно если Вы synthesize написали в implementation блоке), и во-вторых переменная будет доступна из других классов через "."
Не совсем так.
Objective-C
1
2
3
4
5
6
  @interface AAA:NSObject
{
NSDictionary *aaa;
}
@property(retain,nonatomic) NSDictionary *bbb;
  @end

Т.е если член класса объявлен без проперти он не прайвет,а протектет поскольку к нему можно получить доступ из класса наследника.
Для того что бы сделать члены классы прайвет нужно использовать либо ключевое слово @private либо объявить члены класса в пустой категории
@interface AAA()
{
NSDictionary *aaa;
}
@end
Lokendow
-8 / 0 / 0
Регистрация: 19.06.2012
Сообщений: 6
19.06.2012, 19:56     Разница между @property и объявлением переменной в классе хедера #4
Это не прокатит, забейте на это, играйте по правилам, а именно: @property и @syntesize будут видны всем модулям кто подключил модули в которых они объявлены...
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.06.2012, 06:25     Разница между @property и объявлением переменной в классе хедера #5
Lokendow, уважаемый, если Вы НЕ понимаете, что говорите, и главное о чем, не стоит этого делать, прошу Вас.

Добавлено через 16 минут
Santer.Net, не скомпилируется Ваша категория, так написанная.
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
02.07.2012, 23:40     Разница между @property и объявлением переменной в классе хедера #6
Добавлено через 16 минут
Santer.Net, не скомпилируется Ваша категория, так написанная.
Готов поспорить, что скомпилируется и мало того еще и не обвалится во время исполнения. К стати - это очень старый и давно использующейся трюк в обжективе.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
03.07.2012, 06:39     Разница между @property и объявлением переменной в классе хедера #7
Цитата Сообщение от Santer.Net Посмотреть сообщение
Готов поспорить, что скомпилируется и мало того еще и не обвалится во время исполнения. К стати - это очень старый и давно использующейся трюк в обжективе.
Хм, вроде и правда работает. А может кто инфы побольше подкинуть почему?
aply
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 40
20.02.2014, 16:14     Разница между @property и объявлением переменной в классе хедера #8
А зачем объявляют переменные и в теле и в проперти?
Например:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
@interface MyManager : NSObject {
    NSString *someProperty;
}
@property (nonatomic, retain) NSString *someProperty;
@end
 
@implementation MyManager
@synthesize someProperty;
 
.....
@end
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
20.02.2014, 19:44     Разница между @property и объявлением переменной в классе хедера #9
Цитата Сообщение от aply Посмотреть сообщение
А зачем объявляют переменные и в теле и в проперти?
переменная в пропирти не объявляется. Пропирти говорит, что класс будет иметь свойства get/set. В вашем примере объявяются две переменные someProperty и _someProperty, если хотите привязать переменную someProperty к проперти someProperty, вам нужно в synthesize написать
@synthesize someProperty=someProperty;

В новой версии языка synthesize теперь необязательный, как и переменную в хедере необязательно указывать, по умолчанию пропирти обращается к _someProperty
aply
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 40
20.02.2014, 21:29     Разница между @property и объявлением переменной в классе хедера #10
Т.е. если я пропирти не укажу, то мне в методах класса к хэдерным переменным надо обращаться через _ ?
Например, self->_someProperty? Через точку не дает че-то (self._someProperty)...
Megabar
22 / 22 / 3
Регистрация: 01.12.2013
Сообщений: 93
20.02.2014, 21:42     Разница между @property и объявлением переменной в классе хедера #11
aply, нет, к членам класса нужно обращаться просто
Objective-C
1
_someProperty
и это не зависит есть проперти или нет
а через self обращаться к проперти

Добавлено через 3 минуты
aply, если хотите хорошо разбираться в языке, рекомендую официальную документацию от Apple
https://developer.apple.com/library/...uid/TP40011210
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2014, 21:51     Разница между @property и объявлением переменной в классе хедера
Еще ссылки по теме:

Передача переменной между контроллерами Objective-C
Objective-C Зачем нужно свойство @property (assign)
Работа @property в одном классе в разных методах Objective-C
Objective-C @property или ivar
Objective-C Property и synthesize

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aply
0 / 0 / 0
Регистрация: 19.11.2013
Сообщений: 40
20.02.2014, 21:51     Разница между @property и объявлением переменной в классе хедера #12
Спасибо, что-то забыл про неё)
Yandex
Объявления
20.02.2014, 21:51     Разница между @property и объявлением переменной в классе хедера
Ответ Создать тему
Опции темы

Текущее время: 05:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru