stringWithFormat и многострочный текст в UILabel

#iphone #ios

#iPhone #iOS

Вопрос:

оба моих кода работают хорошо .. но я хочу знать .. кто лучше… и который я использую?

первый код…..

 NSString *advance=[[NSString alloc]initWithFormat :@"Pay in Advance Rs %i",pro.s_advance ];
UILabel *label1 =[[UILabel alloc]initWithFrame:CGRectMake(10,5,200,40)];
label1.text=advance;
[cell.contentView addSubview:label1];
[label1 release];
[advance release];
  

и второй код такой…..

 UILabel *label1 =[[UILabel alloc]initWithFrame:CGRectMake(10,5,200,40)];
label1.text=[NSString stringWithFormat:@"Pay in Advance Rs %i",pro.s_advance ];
[cell.contentView addSubview:label1];
[label1 release];
  

Ответ №1:

Первый и второй коды равны.

Единственное отличие заключается в том, что во втором вы создаете autoreleased объект типа NSString . В первом случае вы вручную освобождаете объект типа, NSString поскольку это не autoreleased : [advance release];

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

Я бы предпочел второй, поскольку код будет более чистым.

Комментарии:

1. Я бы рекомендовал скомпилировать под iOS 5 SDK, который будет обрабатывать управление памятью для вас, и тогда вам не придется разбираться, какой из них лучше.

Ответ №2:

Между этими двумя наборами кода нет функциональной разницы, за исключением некоторой очень тонкой / нерелевантной семантики памяти.

Но лично я бы использовал второй, потому что он короче и его легче читать.

Комментарии:

1. … спасибо за предложение… В первом коде… Я освобождаю строку .. но во втором коде .. я не освобождаю строку …. все в порядке?

2. В первом случае вы используете [NSString alloc] для создания строки, которая вернет объект, который вы должны опубликовать позже. Во втором вы используете [NSString string...] для создания строки, которая вернет объект, который будет автоматически выпущен для вас. Общим правилом в большинстве случаев является то, что любой объект, созданный с помощью «alloc» или «copy» или «new» или «retain», должен быть освобожден вами вручную, любой другой объект будет освобожден автоматически.