#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», должен быть освобожден вами вручную, любой другой объект будет освобожден автоматически.