Есть два подхода, которые вы можете использовать:
-Используйте UIAlertView
или «UIActionSheet» вместо этого (не рекомендуется, потому что он устарел в iOS 8, но теперь он работает)
-Кто-то вспомните последний контроллер представления, который представлен. Вот пример.
@interface UIViewController (TopController)
+ (UIViewController *)topViewController;
@end
// implementation
#import "UIViewController+TopController.h"
#import <objc/runtime.h>
static __weak UIViewController *_topViewController = nil;
@implementation UIViewController (TopController)
+ (UIViewController *)topViewController {
UIViewController *vc = _topViewController;
while (vc.parentViewController) {
vc = vc.parentViewController;
}
return vc;
}
+ (void)load {
[super load];
[self swizzleSelector:@selector(viewDidAppear:) withSelector:@selector(myViewDidAppear:)];
[self swizzleSelector:@selector(viewWillDisappear:) withSelector:@selector(myViewWillDisappear:)];
}
- (void)myViewDidAppear:(BOOL)animated {
if (_topViewController == nil) {
_topViewController = self;
}
[self myViewDidAppear:animated];
}
- (void)myViewWillDisappear:(BOOL)animated {
if (_topViewController == self) {
_topViewController = nil;
}
[self myViewWillDisappear:animated];
}
+ (void)swizzleSelector:(SEL)sel1 withSelector:(SEL)sel2
{
Class class = [self class];
Method originalMethod = class_getInstanceMethod(class, sel1);
Method swizzledMethod = class_getInstanceMethod(class, sel2);
BOOL didAddMethod = class_addMethod(class,
sel1,
method_getImplementation(swizzledMethod),
method_getTypeEncoding(swizzledMethod));
if (didAddMethod) {
class_replaceMethod(class,
sel2,
method_getImplementation(originalMethod),
method_getTypeEncoding(originalMethod));
} else {
method_exchangeImplementations(originalMethod, swizzledMethod);
}
}
@end
Использование:
[[UIViewController topViewController] presentViewController:alertController ...];
При создании кластерного индекса он влияет на способ, которым данные физически заказаны на диске. Лучше добавить индекс после факта и позволить механизму базы данных переупорядочить строки, когда это знает, как данные распределяются.
, Например, скажем, необходимо было создать кирпичную стену с пронумерованными кирпичами так, чтобы те, которые имеют самое большое количество, были у основания стены. Это была бы трудная задача, если бы Вам просто вручили кирпичи в произвольном порядке, по одному то - Вы не знали бы, какие кирпичи собирались оказаться самым высоким, пронумерованным, и необходимо будет разъединить стену и восстановить ее много раз. Было бы намного легче справиться с той задачей, если бы Вы имели все кирпичи, выстроенные в линию перед Вами, и могли бы организовать Вашу работу.
Это - то, как это для механизма базы данных - при уведомлении его о целом задании может быть намного более эффективно, чем если бы Вы просто подаете его строка за один раз.
Вы никогда не должны создавать индекс на пустой таблице, если Вы собираетесь в широком масштабе загрузить его правильный впоследствии. Индексы должны сохраняться, когда данные по таблице изменяются, поэтому вообразите, как будто для каждой вставки на таблице индекс повторно вычислялся (который является дорогой операцией). Загрузите таблицу сначала и создайте индекс после окончания с загрузкой. Это, было различие в производительности, идет.
После выполнения больших операций манипулирования данными часто необходимо обновлять базовые индексы. Можно сделать это при помощи UPDATE STATISTICS [таблица] оператор.
другая опция состоит в том, чтобы отбросить и воссоздать индекс, который, если Вы делаете большие вставки данных, вероятно, выполнит вставки намного быстрее. Можно даже включить это в хранимую процедуру.
Думайте о нем этот путь.
, Учитывая
unorderedList = {5, 1,3}
orderedList = {1,3,5}добавляют 2 к обоим спискам.
unorderedList = {5, 1,3,2}
orderedList = {1,2,3,5}
, Что список, Вы думаете, легче добавить к?
Btw, заказывая Ваш вход, прежде чем загрузка будет стимулировать Вас.
Это вследствие того, что, когда SQL Server индексирует таблицу с данными, это в состоянии произвести точную статистику значений в индексированном столбце. В несколько моментов SQL Server повторно вычислит статистику, но когда Вы выполните крупные вставки, распределение значений может измениться после того, как статистика была вычислена в прошлый раз.
то, что статистика устарела, может быть обнаружено на Query Analyzer. Когда Вы видите, что на определенном количестве сканирования таблицы ожидаемых строк отличается к очень от фактических чисел обработанных строк.
необходимо использовать UPDATE STATISTICS для перевычисления распределения значений после вставки всех данных. После того, как то никакое различие в производительности не должно наблюдаться.
это вызвано тем, что, если данные Вы вставка не находится в порядке индекса, SQL должен будет разделить страницы для создания места, чтобы дополнительные строки держали их вместе логически
Это - потому что сервер базы данных должен сделать вычисления каждый раз, когда Вы вставляете новую строку. В основном Вы заканчиваете тем, что повторно индексировали таблицу каждый раз. Это не походит на очень дорогую операцию, и это не, но когда Вы делаете это многие из них вместе, Вы начинаете видеть влияние. Вот почему Вы обычно хотите индексировать после заполнения строк так как это просто будет однократная стоимость.
В дополнение к индексу наверху, выполняя каждый запрос, поскольку транзакция является плохой идеей по той же причине. Если Вы работаете, блоки вставок (скажите 100) в рамках 1 явной транзакции, необходимо также видеть, что производительность увеличивается.
Если у Вас есть индекс на таблице, поскольку Вы добавляете, что данные к таблице SQL Server должны будут переупорядочить таблицу для создания места в соответствующем месте для новых записей. Если Вы добавляете много данных, это должно будет переупорядочить его много раз. Путем создания индекса только после того, как загружаются данные, переупорядочивание только должно произойти однажды.
, Конечно, при импорте записей в индексном порядке, он не должен иметь значения так.