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

Objective-C

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.92
men1n
Сообщений: n/a
#1

@property,@synthesize в Objective-C - Objective-C

03.04.2014, 13:41. Просмотров 1723. Ответов 1
Метки нет (Все метки)

Может кто нибудь понятно объяснить, что на самом деле делает @property и зачем @synthesize.

Читал wiki и другие сайты, но так и не понял.
Почему это работает.
Objective-C
1
2
3
4
5
6
7
8
9
//  Counter.h
#import <Foundation/Foundation.h>
 
@interface Counter : NSObject
{
   //NSNumber *_value;
}
@property(nonatomic,copy)NSNumber* value;
@end
Objective-C
1
2
3
4
5
6
//  Counter.m
#import "Counter.h"
 
@implementation Counter
//@synthesize value=_value;
@end

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#import <Foundation/Foundation.h>
#import "Counter.h"
 
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
        Counter * obj = [[Counter alloc] init];
        [obj setValue:@1];
        NSLog(@"Hello, World! %@",[obj value]);
        
        
    }
    return 0;
}
@property создаёт геттеры и сеттеры.
С параметрами assign/copy/reatain, вроде бы понятно, но не понятно как правильно комбинировать их с atomic,nonatomic,readonly,readwrite.

Добавлено через 12 минут
ага т.е. @property создает переменную protectedв классе и генерирует ещё всякую всячину?
зачем тогда synthesize&

Добавлено через 30 минут
Увидел вот тут Переменная во всех методах
Цитата Сообщение от 97mik Посмотреть сообщение
Как объявить переменную чтобы ею можно было пользоваться во всех методах одного класса?
И ответ:
Цитата Сообщение от zulkis Посмотреть сообщение
Используйте property
И окончательно запутался.

Почему? Зачем?(из-за памяти, что ли?)
Objective-C
1
2
3
4
5
@interface Counter : NSObject
{
    NSNumber *sValue;
}
@end
sValue - будет же видна и так всем методам в @implementation данного класса. Или я что-то не понял?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2014, 13:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос @property,@synthesize в Objective-C (Objective-C):

Property и synthesize - Objective-C
Доброго времени суток! Недавно начал изучать Objective-C, и столкнулся с проблемой при решении задачи. Вообщем сама проблема....

@synthesize и переименование переменных - Objective-C
Разъясните, пожалуйста, какого х... почему постоянно делается так: @interface @property ( strong, nonatomic ) NSObject...

Разбираемся как работает @synthesize - Objective-C
первое правило использования ARC: забыть слово @synthesize Доступ к свойству осуществляется через self.indexFullData, а доступ к...

Перцептрон на objective c - Objective-C
Добрый день! Я пытаюсь реализовать перцептрон на обжектив-С. Но столкнулся с проблеммой, когда через какое-то число эпох выход сети уходит...

Консультации по objective-c - Objective-C
iOS-разработчик с опытом работы в крупной компании дает оперативные консультации по скайпу или е-мейлу по любым вопросам, а также даю уроки...

Objective-C и разработка - Objective-C
Стоит ли мне изучать Objective-C?Если да, то посоветуйте хорошую ГРАФИЧЕСКУЮ среду разработки Objective-C для Windows.

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
03.04.2014, 23:56 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Objective-C
1
2
3
4
5
@interface Counter : NSObject
{
    NSNumber *sValue;
}
@end
Генерирует переменную в секции @protected (by default).
Это значит что в текущем классе вы сможете иметь к ней доступ, из других - нет.

@property генерирует сеттер и геттер методы, которые можно переопределять.

Правильней использовать property даже потому, что мы будем обращаться к их методам set / get, которые при необходимости могут производить необходимые операции над объектом перед его фактическим использованием. Читай ленивая инициализация.

Цитата Сообщение от men1n Посмотреть сообщение
Почему это работает.
Код Objective-C
// *Counter.h
#import <Foundation/Foundation.h>
@interface Counter : NSObject
{
* *//NSNumber *_value;
}
@property(nonatomic,copy)NSNumber* value;
@end
Возможно потому, что правильно написано?
Цитата Сообщение от men1n Посмотреть сообщение
зачем тогда synthesize&
В данной ситуации и последующих писать @synthesize вообще не нужно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 23:56
Привет! Вот еще темы с ответами:

Переход на Objective-C - Objective-C
День добрый, в настоящий момент я пишу на C++. Уже давненько душа тянется к чему-то новому, хочется что-то поменять. И вот в голову пришла...

Литература C++ и Objective-C - Objective-C
Здравствуйте. Книг по C++ гораздо больше, чем по Objective-C, т.к. его область применения шире, но вот интересно, почему по Objective-C...

Рисование в Objective-C - Objective-C
Доброго времени суток. Подскажите пожалуйста как на Objective-C в Xcode реализовать что та типа Paint. Подскажите хотя бы с чего начать или...

Objective-C A to Z Started - Objective-C
Доброго времени суток господа, хотел бы получить у вас совет, решил очень усиленно начать разрабатывать приложения на ios, может кто...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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