С точки зрения питания любой текущий Mac хорошо для разработки iPhone. Вы могли бы хотеть рассмотреть другие факторы, которые зависят от того, как Вам нравится работать.
Вам нравится иногда захватывать машину и просто входить в различную рабочую среду (или показывать Ваш материал людям)? MacBook сопоставимы мудрый питанием, но дают Вам ту свободу.
можно ли работать с глянцевыми экранами, или они раздражают Вас? В последнем случае iMac или MacBook могут быть субоптимальными, и необходимо удостовериться, что Вы получаете более крупный, неглянцевый дисплей как основной экран. Второй дисплей обычно очень полезен для разработки, таким образом, Вы могли бы хотеть иметь тот так или иначе.
И Вы действительно захотите продвинуть RAM по крайней мере к 2 ГБ (4 ГБ хороши, конечно, но не абсолютно необходимы).
Как было указано другими, вам не нужно использовать malloc просто для выполнения:
const char *foo = "bar";
Причина в том, что * foo
равно указатель - когда вы инициализируете foo
, вы не создаете копию строки, а просто указатель на то, где «bar»
находится в разделе данных вашего исполняемого файла. Вы можете копировать этот указатель сколь угодно часто, но помните, что они всегда указывают на один и тот же экземпляр этой строки.
Итак, когда вам следует использовать malloc? Обычно вы используете strdup ()
для копирования строки, которая обрабатывает malloc в фоновом режиме. например,
const char *foo = "bar";
char *bar = strdup(foo); /* now contains a new copy of "bar" */
printf("%s\n", bar); /* prints "bar" */
free(bar); /* frees memory created by strdup */
Теперь мы наконец-то подошли к случаю, когда вы можете захотеть выполнить malloc, если вы используете sprintf ()
или, безопаснее snprintf ()
, который создает / форматирует новую строку.
char *foo = malloc(sizeof(char) * 1024); /* buffer for 1024 chars */
snprintf(foo, 1024, "%s - %s\n", "foo", "bar"); /* puts "foo - bar\n" in foo */
printf(foo); /* prints "foo - bar" */
free(foo); /* frees mem from malloc */
malloc
предназначен для выделения памяти в свободном хранилище. Если у вас есть строковый литерал, который вы не хотите изменять, это нормально:
char *literal = "foo";
Однако, если вы хотите иметь возможность изменять его, используйте его как буфер для хранения строки ввода и так далее, используйте malloc
:
char *buf = (char*) malloc(BUFSIZE); /* define BUFSIZE before */
// ...
free(buf);
Используйте malloc ()
, если вы не знаете, какой объем памяти необходим во время компиляции. В случае, если у вас есть строки только для чтения, вы можете использовать const char * str = "something";
. Обратите внимание, что строка, скорее всего, хранится в области памяти только для чтения, и вы не сможете ее изменить. С другой стороны, если вы знаете строку во время компиляции, вы можете сделать что-то вроде: char str [10]; strcpy (str, "Something");
Здесь память выделяется из стека, и вы можете изменить str. Третий случай - распределение с использованием malloc. Допустим, вы не знаете длину строки во время компиляции. Затем вы можете сделать char * str = malloc (requiredMem); strcpy (str, «Что-то»); free (str);
Каждый раз, когда размер строки не определен во время компиляции, вам нужно выделить память с помощью malloc (или другого эквивалентного метода). В вашем случае вы знаете размер ваших строк во время компиляции (sizeof («что-то») и sizeof («что-то еще»)).