Переменные нескольких экземпляров всегда одинаковы - PullRequest
0 голосов
/ 28 ноября 2011

Я совсем не профи при разработке на языках Си. Просто экспериментирую с этими вещами для развлечения. Моя проблема, вероятно, просто проблема указателя / выделения, но я просто не могу понять это.

Моя проблема в том, что когда я создаю два экземпляра класса с именем Port и хочу назначить разные значения переменной внутри этого экземпляра. Значение product1 и product2, но когда я изменяю один из них, другие экземпляры получают одинаковое значение. Конечно, я хочу определить различные значения для переменных каждого экземпляра.

Переменная объявляется в классе Port следующим образом:

NSObject *product1, *product2; 

И способ их изменения такой:

-(void) setProducts: (NSObject*)setProduct1 andTwo: (NSObject*)setProduct2
{
    product1 = setProduct1;
    product2 = setProduct2;
}

Внутри основного я создаю порты в функции init

   Port *port1 = [[Port alloc] init];        
    [port1 setProducts:@"uno" andTwo: @"dos"];       
    [ports addChild:[port1 getMenuItem]];    

    Port *port2 = [[Port alloc] init];
    [port2 setProducts: @"tres" andTwo: @"viero"];
    [ports addChild:[port2 getMenuItem]];

Я надеюсь, что достаточно вас проинформировал и вы можете помочь. Если мне нужно добавить дополнительную информацию, не стесняйтесь спрашивать.

1 Ответ

2 голосов
/ 28 ноября 2011

Похоже, вы говорите, что эти переменные объявлены примерно так:

// Port.m

#import "Port.h"

NSObject *product1, *product2;

@implementation Port

// Method implementations...

@end

Что означает, что это версия Objective-C "переменных класса". Каждый экземпляр класса имеет к ним доступ, но они являются одной и той же переменной для каждого экземпляра. Если вам нужны переменные экземпляра, вы должны поместить их в объявление интерфейса класса , например:

@interface Port : NSObject 
{
    NSObject * product1;
    NSObject * product2;
}

// Declare methods...

@end

См. Также: Цель обучения C: Учебник для начинающих

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...