Как сохранить NSColor? Для него нет выделений, например, например. UIColor alloc - PullRequest
0 голосов
/ 29 ноября 2010

Я пытаюсь перенести работающий код iPhone на Mac (с iOS на OSX - я верю?)

Рабочая версия iPhone

...
return [[UIColor alloc] initWithRed:r green:g blue:b alpha:1.0f];
}

Неработающая попытка Mac

...
return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}                                       

Но когда я позже получу доступ к контейнеру, NSColor там не будет.Но когда я пробую разные версии [NSColor alloc], ни одна из них не «работает».

Мой вопрос: как мне создать NSColor, который сохраняется (чтобы позже мне пришлось отменить его выделение)

Ответы [ 3 ]

9 голосов
/ 29 ноября 2010
Методы

NSColor +colorWith возвращают автоматически выпущенный экземпляр NSColor, поэтому для получения права собственности на объект вы можете отправить ему сообщение retain.

-(NSColor *) getSomeColor {
   return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
}
//...
//somewhere else...
myColor = [[self getSomeColor] retain];

ДругойСледует отметить, что в соответствии с Политикой владения объектами , вы должны не возвращать объект с счетом сохранения > 0 из метода, в котором нет слов alloc, new или copy.

Таким образом, в этом случае вы должны вернуть автоматически освобожденный NSColor и отправить ему сообщение retain на принимающей стороне.

4 голосов
/ 29 ноября 2010

Вы должны сохранить свой цвет при попытке Mac.Вы вызываете функцию, которая возвращает автоматически освобожденный объект.Вам нужно либо продолжать вызывать эту функцию каждый раз, когда вам нужен цвет, либо делать что-то вроде этого:

return [[NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f] retain];
3 голосов
/ 29 ноября 2010

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

...