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

Objective-C

Войти
Регистрация
Восстановить пароль
 
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
#1

Разбираемся как работает @synthesize - Objective-C

11.07.2014, 17:39. Просмотров 1046. Ответов 12
Метки нет (Все метки)

@synthesize indexFullData;
первое правило использования ARC: забыть слово @synthesize

Доступ к свойству осуществляется через self.indexFullData, а доступ к переменной свойства через _indexFullData

DetailViewController он пустой
Objective-C
1
2
3
4
5
6
7
8
9
-(void) viewDidLoad {
    // << инициализируем массив
    _indexFullData = [NSMutableArray new];
}
 
-(void) dealloc {
   //  << не забыть очистить retain свойство в деструкторе контроллера
   _indexFullData = nil;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 17:39     Разбираемся как работает @synthesize
Посмотрите здесь:

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

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

Разбираемся с файлами интерфейса - Objective-C
Всем привет! Помогите разобраться- начал разбираться с XCode, учусь по книге разработка приложения для iOS 5. Понимаю, что старая, но в...

Разбираемся в условии - Java
помогите решить , или хотя бы понять способ решения данных задач: 1) Определить радиус и центр такой окружности, проходящей хотя бы...

Разбираемся с массивами - PHP
$plugins = array( array( &quot;plugin&quot; =&gt; &quot;AdminList&quot;, &quot;description&quot; =&gt; &quot;Показывает администраторов&quot;, ), ); Есть вот такой...

Разбираемся с SourceGrid - C#
Доброго времени суток бойцы, делал проект с DataGridView , но потребовалась сложная шапка , решил использовать SourceGrid (кидаю простую...

разбираемся с потоками - Java SE
добрый вечер всем начинаю потихоньку разбираться с потоками...есть такая задача - у меня есть программа - которые использует 10-15...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 19:05     Разбираемся как работает @synthesize #2
Цитата Сообщение от noname_club Посмотреть сообщение
первое правило использования ARC: забыть слово @synthesize
Это кто вам такую глупость сказал?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 19:11  [ТС]     Разбираемся как работает @synthesize #3
Это кто вам такую глупость сказал?
Не важно кто. Важно то -- это правило работает.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 19:15     Разбираемся как работает @synthesize #4
Цитата Сообщение от noname_club Посмотреть сообщение
Не важно кто. Важно то это правило работает.
Важно то, что это глупость несусветная.
Не нужно запутывать людей, которые и так не разобрались что к чему.
Я думаю вам следовало бы прочитать что такое все же @synthesize и для чего оно.
И главное: понять причину, по которой "@synthesize a = _a;" можно не писать с появлением LLVM 4-й версии.

P.S. А еще важнее - придумать случаи, в которых @synthesize необходим.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 19:25  [ТС]     Разбираемся как работает @synthesize #5
Эта причина мне известна.

А еще важнее - придумать случаи, в которых @synthesize необходим.
С ARC таких случаев не осталось. Разве что для случаев с со смешиванием кода ObjC++
Можно также сказать что ARC сам за тебя ставит эти @synthesize автоматически. Пусть не совсем корректно, но лучше запоминается.

Все что без ARC, @synthesize использует по "понятным причинам"
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 19:29     Разбираемся как работает @synthesize #6
Цитата Сообщение от noname_club Посмотреть сообщение
С ARC таких случаев не осталось.
Привязались вы к этому ARC... Хотя он тут не при чем вообще. Это фича LLVM...

Если вы переопределите методы доступа доступные для свойства - вам придется написать свой synthesize.
Опять путаете?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 19:40  [ТС]     Разбираемся как работает @synthesize #7
Если вы переопределите методы доступа доступные для свойства
правда?

Objective-C
1
2
3
4
5
6
7
#import <Foundation/Foundation.h>
 
@interface HelloClass : NSObject
 
@property (nonatomic) NSString * sstring;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
#import "HelloClass.h"
 
@implementation HelloClass
 
-(void)setSstring:(NSString *)sstring {
    _sstring = [NSString stringWithFormat:@"%@2222",sstring];
}
 
-(void) dealloc {
    _sstring = nil;
}
@end
ну где тут слово на букву S ?

Если речь идет о полной перезаписи методов свойства.
То там тоже не наблюдается заветного слова

Objective-C
1
2
3
4
5
6
@interface HelloClass : NSObject
 
@property (nonatomic) NSString * ss_value;
@property (nonatomic) NSString * sstring;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#import "HelloClass.h"
 
@implementation HelloClass
 
-(void)setSstring:(NSString *)sstring {
    
    _ss_value = sstring;
}
 
-(NSString*) sstring {
    return _ss_value;
}
 
-(void)dealloc {
    _ss_value = nil;
}
 
@end
тест

Objective-C
1
2
3
4
5
HelloClass * c = [HelloClass new];
    
    c.sstring = @"Hello world";
    
    NSLog(@"%@", c.sstring);
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 19:45     Разбираемся как работает @synthesize #8
noname_club, а забавно, я даже на 10 секунд подумал что вы волшебник.
Ан нет, дым рассеялся.

Objective-C
1
@property (nonatomic) NSString * ss_value;
Уберите из вашего примера. Чтобы по-честному играть. И ivar не добавляйте.
Пусть "ARC синтезирует"[/sarcasm]
И я посмотрю что потом скажете.
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 19:51  [ТС]     Разбираемся как работает @synthesize #9
свойство с override методом чтения данные и не должно хранить , так как негде.

А добавление туда @sythenize требует гугление как оно собственно работает, кем придумано и почему забыто.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 19:56     Разбираемся как работает @synthesize #10
noname_club, я не буду докапываться к тому, что "свойство что-то где-то хранит", я спрошу вас:
А как же генерация переменной ARC-ом?
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 19:59  [ТС]     Разбираемся как работает @synthesize #11
А как же генерация переменной ARC-ом?
вы уже сами сказали что это LLVM компилятор уличную магию делает. ARC тут не причем.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.07.2014, 20:00     Разбираемся как работает @synthesize #12
Цитата Сообщение от noname_club Посмотреть сообщение
А добавление туда @sythenize требует гугление как оно собственно работает, кем придумано и почему забыто.
noname_club, теперь я понял что вы не отличаете интерфейс и реализацию.
Какая интересная дискуссия однако.

Цитата Сообщение от noname_club Посмотреть сообщение
вы уже сами сказали что это LLVM компилятор уличную магию делает. ARC тут не причем.
Опять грязные приемы? Используете мою просьбу обосновать свое утверждение...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2014, 20:22     Разбираемся как работает @synthesize
Еще ссылки по теме:

Разбираемся с показательным распределением - Теория вероятностей
Понадобилось тут вспомнить молодость, да посчитать всякое для показательного распределения (\lambda exp(-x\lambda ) именно для такого) ...

разбираемся со скриптом для last-modified - PHP
народ привет тут нашел скрипт и хочу его использовать для своего сайта вот сам скрипрт &lt;?php // Файл...

Настройка шлюза, разбираемся в тонкостях - Ubuntu Linux
Привет всем! В общем ситуация такая: на предприятии (25 пк) есть ЛВС, диапазон 192.168.0.3-192.168.0.30 выход в интернет через ADSL модем...

Завалил тест, разбираемся с ошибками - Turbo Pascal
Парни сдавал тест состоящий из 40 вопросов, и ответил только на 24 правильно ( Тестирование проходил здесь Тестирование по паскалю ...

Разбираемся с функциями и пишем Encode & Decode - C++
Напишите подпрограммы Encode (зашифровать) и Decode (расшифровать), которые получают два параметра str и alpha типа string. В первом...


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

Или воспользуйтесь поиском по форуму:
noname_club
102 / 90 / 9
Регистрация: 01.05.2013
Сообщений: 583
11.07.2014, 20:22  [ТС]     Разбираемся как работает @synthesize #13
Истину ты уже высказал
Это фича LLVM...
А раз истина найдена спор окончен.

Первое правило переформулирую согласно истине.

первое правило использования свойств в LLVM с ARC: забыть слово @synthesize
Добавлено через 12 минут
Если по теме, раз уже тема создалась.

ТО @synthesize просто пишет сеттер и геттер свойства и связывает их с переменной которая объявлена как переменная класса.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
#import <Foundation/Foundation.h>
 
@interface HelloClass : NSObject {
    NSString * value_; // << переменные класса
    NSString * nosythenize_;
}
 
@property (nonatomic) NSString * value;
 
@property (nonatomic) NSString * nosythenize;
 
@end
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import "HelloClass.h"
 
@implementation HelloClass
 
@synthesize value  =  value_; /* сеттер и геттер объявлены автоматически */
 
-(NSString *)nosythenize { /* сеттер и геттер объявлены вручную */
    /* сеттер */
    return nosythenize_;
}
 
-(void)setNosythenize:(NSString *)nosythenize {
    /* геттер */
    nosythenize_ = nosythenize;
}
 
// <<
 
-(void)dealloc {
    nosythenize_ = nil;
    value_ = nil;
}
 
@end
Тест

Objective-C
1
2
3
4
5
6
HelloClass * c = [HelloClass new];
    
    c.value = @"Hello";
    c.nosythenize = @"Wolrd";
    
    NSLog(@"%@ %@",  c.value, c.nosythenize);
Yandex
Объявления
11.07.2014, 20:22     Разбираемся как работает @synthesize
Ответ Создать тему
Опции темы

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