function hasLowerCase(str) {
return str.toUpperCase() != str;
}
или
function hasLowerCase(str) {
for(x=0;x<str.length;x++)
if(str.charAt(x) >= 'a' && str.charAt(x) <= 'z')
return true;
return false;
}
Я считаю, что общепринятая практика - возвращать ноль в случае неудачи. Но вы действительно хотите освободить себя, чтобы избежать утечки:
-(id)init
{
if (self = [super init]) {
...
if (thingsWentWrong) {
[self release];
return nil;
}
...
}
return self;
}
Правильные решения (исключения и / или [самовыпуск]; return nil;
) были рассмотрены, я обращусь к неправильным решениям.
Дон ' t отправить dealloc
напрямую. Это работа выпуска
. (И если ваш код когда-либо работает в GC, dealloc
неприменим, и я мог только предполагать, какие проблемы вызовет его вызов.)
Дважды не используйте super
], чтобы отправить его напрямую. Это пропустит вашу собственную реализацию dealloc
.
Философия Cocoa в отношении исключений заключается в том, что они должны выдаваться только в ситуациях, которые являются ошибками программиста , например, передача недопустимого аргумента методу. Если что-то еще пойдет не так, метод должен просто вернуть NO или nil и, надеюсь, сообщить подробности с помощью параметра «out» NSError **
Сюда входят методы -init. Если ситуация с ошибкой является чем-то, что может законно возникнуть в готовом продукте, тогда метод должен освободить self (чтобы избежать утечки) и вернуть nil.
Если что-то еще пойдет не так, метод должен просто вернуть NO или nil и, надеюсь, сообщить подробности с помощью параметра «out» NSError **Сюда входят методы -init. Если ситуация с ошибкой является чем-то, что может законно возникнуть в готовом продукте, тогда метод должен освободить self (чтобы избежать утечки) и вернуть nil.
Если что-то еще пойдет не так, метод должен просто вернуть NO или nil и, надеюсь, сообщить подробности с помощью параметра «out» NSError **Сюда входят методы -init. Если ситуация с ошибкой является чем-то, что может законно возникнуть в готовом продукте, тогда метод должен освободить self (чтобы избежать утечки) и вернуть nil.
Я всегда использовал метод очистки и возврата nil . Три метода, которые вы упомянули в заголовке вопроса, могут вызвать segfaults выше в иерархии вызовов, тогда как возврат nil - нет. Я считаю, что сами документы Apple говорят, что в случае неудачи они возвращают ноль. Где вы находите неточности?