NSNotification userinfo пример?

Функция alloca великолепна, и все скептики просто распространяют FUD.

void foo()
{
    int x = 50000; 
    char array[x];
    char *parray = (char *)alloca(x);
}

Массив и parray точно такие же, с точно такими же рисками. Сказать, что один лучше другого - это синтаксический, а не технический выбор.

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

Почему это плохо?

5
задан iDeveloper 1 April 2016 в 13:09
поделиться

2 ответа

В Cocoa Touch (но не в Cocoa) CGPoints могут быть обернуты и развернуты с помощью

+ (NSValue *)valueWithCGPoint:(CGPoint)point
- (CGPoint)CGPointValue

NSValues ​​могут быть сохранены в NSDictionary, переданном как параметр userinfo.

Например:

NSValue* value = [NSValue valueWithCGPoint:mypoint];
NSDictionary* dict = [NSDictionary dictionaryWithObject:value forKey:@"mypoint"];

] И в вашем уведомлении:

NSValue* value = [dict objectForKey:@"mypoint"];
CGPoint newpoint = [value CGPointValue];
15
ответ дан 18 December 2019 в 10:48
поделиться

Объект userinfo, переданный вместе с уведомлением, является просто NSDictionary. Вероятно, самый простой способ передать CGPoint в пользовательской информации - заключить координаты X и Y в NSNumbers с помощью -numberWithFloat :. Затем вы можете использовать setObject: forKey:

1
ответ дан 18 December 2019 в 10:48
поделиться