Масштаб события

Дано

@interface Canvas:NSView {        
    NSNumber * currentToolType; 
    ...
}

объявлен в моем файле .h и в файле .m

- (id)initWithFrame:(NSRect)frame {
    self = [super initWithFrame:frame];
    if (self) {
        currentToolType=[[NSNumber alloc]initWithInt:1];
    }
    return self;
}

и дальше вниз

-(void)mouseUp:(NSEvent *)event
{
   NSLog(@"tool value in event: %d",[currentToolType intValue]);
   //rest of code
}

-(NSBezzierPath *)drawPath:(NSRect)aRect
{
   NSLog(@"tool value in draw: %d",[currentToolType intValue]);

// остальная часть кода метода drawPath, который использует значение currentToolType в статусе переключателя

}

-(IBAction)selectToolOne:(id)sender
{
   [currentToolType release];
   [currentToolType = [[NSNumber alloc]initWithInt:0];
}

-(IBAction)selectToolTwo:(id)sender
{
   [currentToolType release];
   [currentToolType = [[NSNumber alloc]initWithInt:1];
}

Методы действий - единственное место, где заменяется currentToolType. Но почему-то кажется, что это другой экземпляр currentToolType в mouseUp. Я не писал (и не синтезировал) аксессоры для var, поскольку он используется только сам по себе. Я заметил, что initWithFrame вызывается дважды - я предполагаю, что это для родительского окна и NSView?

Что мне не хватает?
СПАСИБО!
Это приложение на основе документов, созданное XCode с использованием COCOA и Obj-C. Я новичок в обоих.

Кто-то, у кого больше репутации, должен переименовать это, поскольку на самом деле это не имеет ничего общего с областью действия или событиями.

Jim Puls 29.11.2008 06:28

Джим. Я согласен. название из-за отсутствия опыта. Я могу изменить его, так как спросил - что бы вы посоветовали для более подходящего названия?

Eggs McLaren 29.11.2008 06:37
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
182
2

Ответы 2

Вы, вероятно, столкнулись с особым случаем: NSNumber мог иметь кешированные экземпляры для представления часто используемых чисел.

Однако два наблюдения:

  • Вы тратите много памяти, используя NSNumber, тогда как вы можете просто использовать NSIntegers или, возможно, старомодный перечислимый тип, полностью избегая накладных расходов на объект.
  • На самом деле вы никогда не показывали свой код, когда вы смотрите на экземпляры NSNumber; без него здесь действительно недостаточно информации, чтобы ответить на ваш вопрос.

Спасибо, Джим. Я использовал простую int - такую ​​же сделку. Вы спросили, как это используется. Точно так же, как и в статистике NSLog. например переключатель (currentToolType intValue] {case 0: .... и т. д.

Eggs McLaren 29.11.2008 06:31

Вы упомянули, что initWithFrame: вызывается дважды. Ваш initWithFrame: следует вызывать только один раз (если только у вас нет двух представлений Canvas).

Возможно ли, что у вас есть представление Canvas в вашем файле nib / xib, а также вы создаете еще один в коде (с alloc / initWithFrame :)?

В этом случае у вас есть два объекта Canvas. Вероятно, один из них подключен к вашим элементам управления, а другой находится в окне (и, таким образом, отвечает на mouseUp: и каждый раз дает вам одно и то же значение).

Если у вас есть настройка представления холста в IB, вы можете решить эту проблему, удалив код, создающий второй.

Другие вопросы по теме