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

Как получить доступ к переменным объекта класса-родителя? - Objective-C

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
07.06.2012, 19:31     Как получить доступ к переменным объекта класса-родителя? #1
Я знаю, что обычно передают указатель на объект класса в функцию чайлда, но вот как это сделать на ObjC никак не могу понять.

Попытался сделать так
Objective-C
1
-(void) initBubble:(HelloWorldLayer)parentObj;
Но компиллер заругался. Как это вообще лучше сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
08.06.2012, 05:34     Как получить доступ к переменным объекта класса-родителя? #2
Что Вам нужно сделать?
Если вы передадите указатель на объект в другой объект при его создании - он не будет его "родителем", даже если он таким является по иерархии наследования. Вам следует почитать что такое родительский класс.

Also, init должен возвращать как минимум (id).

Для создания класса используйте конструкцию


Objective-C
1
2
3
4
5
6
7
- (id)init {
   self = [super init]; //super - всегда родительский класс текущего.
   if (self) {
 
   }
   return self;
}
А компилятор ругается видимо на (HelloWorldLayer*) - не?
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
08.06.2012, 11:23  [ТС]     Как получить доступ к переменным объекта класса-родителя? #3
Сейчас попробую объяснить еще раз ) Вобщем я на коксе пишу штуковину. У меня вот этот самый Хеллоу Ворлд слой добавляет себе спрайт. Не через наследование, то есть класс не расширяется от родительского. То есть отношение не типа super -> subclass, а parent -> child.

Я просто только-только перекочевал с AS3 на Обджектив, все очень непривычно ) Так вот, проведу аналогию чего я хочу добиться
например у нас есть главный класс который добавляет себе чайлда как объект отображения, а для того, чтобы чайлд имел доступ к свойствам пэрента мы передаем чайлду ссылку на него в его метод-конструктор.
ActionScript 3
1
2
3
4
5
6
7
8
9
10
public class Main
{
    public var bubbles:Array = new Array();
 
    public function Main()
    {
        var bubble:Bubble = new Bubble(this);
        addChild(child);
    }
}
Ну и код чайлда

ActionScript 3
1
2
3
4
5
6
7
public class Bubble
{
    public function Bubble(parentObject:Main)
    {
        trace(parentObject.bubbles);
    }
}
Вот мне надо такую же штуковину сделать на Обджектив Си )
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
11.06.2012, 11:19     Как получить доступ к переменным объекта класса-родителя? #4
То что Вы пытались сказать называется композиция.
А что бы ее достичь не обязательно передавать данный параметр в конструкторе. Можно просто создать property в классе, а потом ему установить тот объект который вам нужен.
Хотя можно это и через конструктор сделать, но теряется гибкость.

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@interface Child:NSObject
 
@property(nonatomic,retain) YourParentClass *parObj;
//2 способ, через конструктор
-(id) initWitParentClass:(YourParentClass *) someParObj;
@end
 
@implementation Child
 
@synthesize parObj;
 
-(id) initWitParentClass:(YourParentClass *) someParObj
{
   self=[super init];
    if(self)
    {
      self.parObj=someParObj;
     }
   return self;
}
@end
Objective-C
1
2
3
4
5
YourParentClass *po=[YourParentClass alloc] init];
Child *chl=[Child alloc] init];
//1 способ
[chl setYourParentClass:po];
[po release];
zulkis
 Аватар для zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
11.06.2012, 12:14     Как получить доступ к переменным объекта класса-родителя? #5
Santer.Net, Я бы сказал что композиция с Parent классом неуместна.
Ибо
Objective-C
1
@property(nonatomic,retain) YourParentClass *parObj;
Нехорошо ретейнить родителя предком, очень нехорошо, я думаю не стоит объяснять почему.

В нашем случае это максимум агрегация, то есть не retain, а assign.
Как то так. Если имеются контра аргументы - прошу )
Santer.Net
15 / 15 / 1
Регистрация: 18.11.2010
Сообщений: 122
11.06.2012, 12:44     Как получить доступ к переменным объекта класса-родителя? #6
Я полностью согласен. Не досмотрел с ретеин(((
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 18:23     Как получить доступ к переменным объекта класса-родителя?
Еще ссылки по теме:

Objective-C Создание объекта
Вызов метода из другого класса Objective-C
Не получается связать два объекта Objective-C
Objective-C Свойства класса
Как сделать доступ к элементам массива по индексу и по литералу индекса? Objective-C

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

Или воспользуйтесь поиском по форуму:
Fennec
1 / 1 / 0
Регистрация: 10.02.2010
Сообщений: 36
13.06.2012, 18:23  [ТС]     Как получить доступ к переменным объекта класса-родителя? #7
Уже успел разобраться, нов се равно спасибо )
Yandex
Объявления
13.06.2012, 18:23     Как получить доступ к переменным объекта класса-родителя?
Ответ Создать тему
Опции темы

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