Вы можете использовать LINQ для удаления символа из массива символов, если символ с данным индексом является числом.
//This will return you the list of char discarding the number.
var removedDigits = tocheckTextBox.Where(x => !char.IsDigit(x));
//This will return the string without numbers.
string output = string.join("", removedDigits);
В Objective C возможно возвратить экземпляр кроме сам от -init
. Классы делают это, например, для осуществления одноэлементного экземпляра, или в случае кластеров класса. NSNumber
, например, возвращается, подкласс в зависимости от типа значения передал своему инициализатору. Таким образом, когда Вы звоните [[NSNumber alloc] initWithLong:long_value]
, NSNumber
-initWithLong:
инициализатор называют после NSNumber
+alloc
, но подкласс NSNumber
может быть возвращен oringial вызывающей стороне. Таким образом шаблон
сам = [супер init];
который повторно присваивается self
к значению [super init]
так, чтобы self
точки к фактическому экземпляру это [super init]
возвращенный. Если +alloc
или super's init
сбои метода, результат [super init]
может быть nil
. Для предотвращения, побочные эффекты в случае неудавшейся инициализации, шаблон затем становится
- (id) init { if(self = [super init]) { // do initialization of instance variables etc. } return self; }
Обратите внимание, что необходимо возвратиться self
(или nil
или другой экземпляр) от init
метод. Необходимо присвоиться сам к [super init]
и можно проверить на nil
прежде, чем сделать больше работы.
Вам, вероятно, придется выпустить возвращаемое значение staic метода. Необходимо прочитать руководство по управлению памятью Какао. Правило обычно довольно просто: Если метод, который Вы называете, имеет "новый", "выделение" или "копия" в ее подписи, результат принадлежит вызывающей стороне, и вызывающая сторона должна звонить -release
на том экземпляре или будет утечка памяти. Конечно, необходимо звонить -retain
на чем-либо еще (т.е. не от "выделения", "нового" или метод "копии"), Вы хотите сохранить ссылку на и затем звонить -release
или -autorelease
когда Вы сделаны с тем экземпляром.
str = @"Hi there!"
, принятие str
был объявлен как NSString *str;
присваивает адрес строковой константы @"Hi there!" to the value of the
ул.variable. You do not need to retain or release string constants.
ул. = [[выделение NSString] initWithString:@ "Привет там!"];allocates a new string instance. The value of
ул.will be the address of this instance. Each call of
ул. = [[выделение NSString] initWithString:@ "Привет там!"];again will allocate a new instance. So after
str2 = [[выделение NSString] initWithString:@ "Привет там!"];,
ул.! = str2, while after
str2 = "Привет Вот!", str==str2
. См. этот ответ также.
-autorelease
добавляет получатель к току NSAutoreleasPool
. Когда пул истощен (обычно в конце текущего повторения цикла выполнения, или когда пул вручную истощен), вызовы пула -release
на всех экземплярах в пуле. Если это -release
отбрасывания сохранить количество к 0, объект освобожден (и -dealloc
названный) так же, как с любым другим -release
. Используя автовыпуск пул обычно осуждается на iPhone, потому что он может заставить Вас накапливать много неиспользованных экземпляров в пуле, прежде чем он будет истощен в конце повторения цикла выполнения. Если можно использовать -release
вместо -autorelease
, Вы обычно должны. Снова, см. руководство по управлению памятью Какао для большего количества информации.
self
указатель - что-то, что система должна сделать, а не программист.Кроме того, многие люди предпочитают сохранять основную строку процесса выполнения программы максимально нес отступом. В этом случае код инициализации мог быть переписан как:
- (id)init {
if (![super init]) {
return nil; // There is a problem so bail early.
}
// Initialisation code here.
return self
}
Будет Шипли объяснять это намного лучше, чем я.
1: Эта проверка должна гарантировать, что супер конструктор возвратил новый объект.
2: Статические методы не относятся к экземпляру
3:
str = @"Hi there!"
Это присваивает адрес постоянной строки "Привет там!" к ул. указателя
str = [[NSString alloc] initWithString:@"Hi there!"];
Это выделяет строку и копирует "Привет Вот!" к нему. Это означает что a) ул. является модифицируемой и b) потребности, которые будут освобождены, когда Вы сделаны с ним.
Если сам ноль после супер инициализации затем, Вы, вероятно, вне памяти. Ваш единственный разумный план действий должен возвратить ноль, и вещи надежды обрабатываются корректно далее стек.
Статические методы не позволяются, выделяют на "куче", поэтому нет ничего к свободному.
Прежде всего строка компилируется в сегмент данных Вашего приложения и не может быть освобождена. Во втором экземпляре Вы выделяете память от "кучи" и копируете Вашу статическую строку (с сегмента данных) в него.
Это - простая сборка "мусора". Относительно того, почему использовать его, простой ответ, не делают. Не рекомендуется использовать автовыпуск на iPhone из-за ограниченных ресурсов.
вызов
self = [super init];
Может возвратить ноль, если суперкласс не может инициализировать себя по какой-либо причине, включая память, являющуюся недоступными, или определенными предпосылками, не были встречены. Если это так, Вы не хотите пытаться установить переменные сам, или установить сам как делегат или добавить сам к массиву, если сам ноль.
Пул автовыпуска является чем-то созданным на каждое событие, iPhone посылает Ваше заявление. Это создано перед любыми выполнениями кода и выпущено после того, как весь Ваш код сделан для каждого события. Любые объекты, которые Вы называете autorelease
на будет помещен в текущий пул автовыпуска. Любые объекты в пуле автовыпуска будут выпускаться так много раз, как они были добавлены, после того, как Ваш код завершается. Таким образом Вы не должны волноваться о том, кто ответственен за выпуск объекта, созданного одним методом, и возвратился к другому методу.
Можно создать собственные объединения автовыпуска по мере необходимости.
str = [[NSString alloc] initWithString:@"Hi there!"];
Эта строка создает строку, которая не находится в пуле автовыпуска, таким образом, необходимо выпустить ее вручную. Просто запись
@"Hi there!";
возвращает строку, которую Вы не должны волновать по поводу выпуска. Расширение предыдущего примера:
str = [[[NSString alloc] initWithString:@"Hi there!"] autorelease];
был бы другой метод создания строки, которую Вы не должны волновать по поводу выпуска.
Одно различие между пулами сборки "мусора" и автовыпуска - то, что сборка "мусора" работает с циклическими ссылками. Используя пулы автовыпуска, Вы не хотите иметь два объекта, которые сохраняют друг друга и надеются, что, после того как ничто иное не относится к ним, они выйдут из существования; они не будут.