Форум программистов, компьютерный форум, киберфорум
Objective-C
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
1

ObjectiveC предикаты, упрощенный метод

09.07.2013, 12:58. Показов 3073. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Предикаты в Obj C, как известно, используются там, где нужно фильтровать или найти, сравнить данные

Остановимся на наиболее распространненых случаях использования предикатов

- фильтр строкового массива
- сравнение строк

заглянем в документацию
http://macbug.ru/cocoa/predformat#.URul8OjoRGM

после прочтения становиться ясно что в том виде к каком предикаты существуют в ObjC использовать не вполне удобно.

Проведем классификацию типов выражений с предикатами в макросы

// Предикаты
Objective-C
1
2
3
4
5
6
7
8
9
10
11
#define fi_start @"BEGINSWITH[cd]"
#define fi_end @"ENDSWITH[cd]"
#define fi_like @"LIKE[cd]"
#define fi_include @"CONTAINS[cd]"
#define fi_regular @"MATCHES[cd]"
 
#define fs_start @"BEGINSWITH"
#define fs_end @"ENDSWITH"
#define fs_like @"LIKE"
#define fs_include @"CONTAINS"
#define fs_regular @"MATCHES"
префиксы означают:

fs - чувствительны к регистру
fi - не чувствительны к регистру

Расшифровка названий

start - совпадание по началу строки
end - совпадение по концу строки
like - похож на SQL like, ? соответствует 1-му символу, * соответствует 0 или более символов

include - совпадение по подстроке (строка содержит строку)
regular - совпадение по регулярному выражению

Исходный код функций

SimplePredicate.h
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// упрощенные предикаты
// FreeSoft 2013
 
#define fi_start @"BEGINSWITH[cd]"
#define fi_end @"ENDSWITH[cd]"
#define fi_like @"LIKE[cd]"
#define fi_include @"CONTAINS[cd]"
#define fi_regular @"MATCHES[cd]"
 
#define fs_start @"BEGINSWITH"
#define fs_end @"ENDSWITH"
#define fs_like @"LIKE"
#define fs_include @"CONTAINS"
#define fs_regular @"MATCHES"
 
#import <Foundation/Foundation.h>
 
@interface NSString (NSString_SimplePredicate)
 
-(bool) predicateMatch:(NSString*) filter
                value: (id) value;
 
@end
 
@interface NSArray (NSArray_SimplePredicate)
 
-(NSArray*) predicateFilter: (NSString*) filter
                      value: (id) value;
 
@end
SimplePredicate.m
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// упрощенные предикаты
 
 
#import "SimplePredicate.h"
 
@implementation NSString (NSString_SimplePredicate)
 
 
-(bool) predicateMatch:(NSString*) filter
                 value: (id) value {
    // функция сравнения строк через выражения
    NSString *p1 = [NSString stringWithFormat:@"SELF %@ %%@",filter];
    NSPredicate *regexp = nil;
    if (value) {
        regexp = [NSPredicate predicateWithFormat:p1,value];
    }
    return [regexp evaluateWithObject:self];
}
 
@end
 
@implementation NSArray (NSArray_SimplePredicate)
 
-(NSArray*) predicateFilter: (NSString*) filter
                      value: (id) value {
    // функция фильтрации массивов
    NSString *p1 = [NSString stringWithFormat:@"SELF %@ %%@",filter];
    NSPredicate *regexp = nil;
    if (value) {
        regexp = [NSPredicate predicateWithFormat:p1,value];
    }
    return [self filteredArrayUsingPredicate:regexp];
}
 
@end
Использование

если нужно сравнить строку с другой строкой то

Objective-C
1
2
3
4
5
6
7
 NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fs_start value:@"Helo"];
    
    if (ok) {
        NSLog(@"есть совпадение");
    }
то есть не нужно запоминать какой предикат как пишется и как составляется, достаточно написать префикс fs fi чтобы xcode сам подсказал каким предикатом можно воспользоваться

Мануал по регуляркам тут
http://userguide.icu-project.org/strings/regexp
однако можно воспользоваться более "понятным" мануалом например по php или JavaScript, выражения практически идентичны

пример с регулярным выражением

Objective-C
1
2
3
4
5
6
7
NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fi_regular value:@"h\\w+\\s\\w+"];
 
   if (ok) {
        NSLog(@"есть совпадение");
    }

Тестовая программа

ObjectiveC предикаты, упрощенный метод


Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
-(void) ShowMessage: (bool) ok {
    if (ok) {
        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"" message:@"Есть совпадение" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil];
        [a show];
    } else {
        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"" message:@"НЕТ совпадения" delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil];
        [a show];
    }
}
 
-(void) ShowArray: (NSArray*) ar {
    NSString *sa = [ar componentsJoinedByString:@"\n"];
    UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"" message:sa delegate:nil cancelButtonTitle:@"ok" otherButtonTitles: nil];
    [a show];
}
 
- (IBAction)btn_start:(id)sender {
    NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fs_start value:@"Helo"];
    
    [self ShowMessage:ok];
    
}
 
- (IBAction)btn_include:(id)sender {
    NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fs_include value:@"o worl"];
    
    [self ShowMessage:ok];
    
}
 
- (IBAction)btn_regular:(id)sender {
    NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fi_regular value:@"h\\w+\\s\\w+"];
    
    [self ShowMessage:ok];
}
 
- (IBAction)btn_like:(id)sender {
    NSString* s = @"Helo world";
    
    bool ok = [s predicateMatch:fi_like value:@"Helo ??rld"];
    
    [self ShowMessage:ok];
 
}
 
- (IBAction)btn_filter:(id)sender {
    NSArray* array = [NSArray arrayWithObjects:@"hello",@"world",@"pen",@"dog",@"xOx", nil];
    
    NSArray* result = [array predicateFilter:fi_include value:@"o"];
    
    [self ShowArray:result];
    
}
Вложения
Тип файла: zip test_predicates.zip (78.2 Кб, 5 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.07.2013, 12:58
Ответы с готовыми решениями:

Нужен самоучитель по ObjectiveC
Здравствуйте! Подскажите пожалуйста хороший самоучитель по objective-c (можно и видео уроки) и что...

С чего начать вводную в программирование, и дойти до ObjectiveC?
Всем добрый день и хорошего дня) Для многих моя тема будет обыденностью и нубством а для кого то и...

Упрощенный метод Симпсона
Обычно для расчета определенных интегралов применяют метод парабол (Симпсона) для четного числа n....

Предикаты и метод резолюции
Ребят, помогите, пожалуйста, последний зачет остался, вообще в этом не шарю.. Чтобы не...

18
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
09.07.2013, 13:35 2
Я вот что непонимаю:
Вам прошлых мыслей сообщества не хватило по поводу многомерных ваших словарей? А я напомню.
Опять с велосипедом? Прикрутили гудок и трещалку и считаете что это бонус? Упс, нет.

после прочтения становиться ясно что в том виде к каком предикаты существуют в ObjC использовать не вполне удобно.
Кто Вам такое сказал? Мне вот например уже больше 2х лет удобно. А у Вас какой опыт?
На чем основано Ваше суждение? Какие ваши доказательства?(с)

У меня еще один вопрос: На кой черт эти дефайны? Вы где вообще "упрощение" увидели?
Напишите мне предикат сложный с вложенными предикатами используя свое упрощение.
С реальной моделью данных. Сами убедитесь в несостоятельности Ваших предложений.
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
09.07.2013, 13:35 3
Снова здорово. Вместо того, чтобы один общеупотребительный язык изучить, давайте свой какой-нибудь изобретем. Опять обострение?
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
09.07.2013, 19:00  [ТС] 4
С реальной моделью данных. Сами убедитесь в несостоятельности Ваших предложений.
реальная модель что должна из себя представлять? многомерный словарь? БД или что?

самую тривиальную задачу со "вложенными" предикатами опишите

Добавлено через 17 минут
На кой черт эти дефайны?
у макросов есть "увидительные" свойства

1) они выделяются коричневым цветом на фоне переменных, что какбы намекает на их постоянство и важность в коде
2) xcode их подсказывает в автодополнении
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
09.07.2013, 19:02 5
Цитата Сообщение от noname_club Посмотреть сообщение
они выделяются коричневым цветом на фоне переменных, что какбы намекает на их постоянство и важность в коде
Согласен. Коричневый цвет - он именно на важность и намекает. На постоянство - в меньшей степени, но вот на важность - несомненно!
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
09.07.2013, 19:05  [ТС] 6
сарказм?
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
09.07.2013, 19:06 7
Разумеется
1
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
10.07.2013, 00:26 8
Цитата Сообщение от mobidevelop Посмотреть сообщение
Снова здорово. Вместо того, чтобы один общеупотребительный язык изучить, давайте свой какой-нибудь изобретем. Опять обострение?
Серьезно, был же такой изобретатель, вместо NSDictionary советовал использовать макросы dict и все маломальские конструкции на 1 строку оборачивал в макросы, то ли с ооп знаком не был, то ли про методы не слышал или про то, что код должен быть читаемым в первую очередь, а не просто кучей кастомных макросов горе-программиста.

Вы же пишите одноразовые методы, которые можно использовать в очень узких и конкретных целях, зачем выставлять это на показ, мы же все каждый день пишем какие-то методы для упрощения и удобочитаемости своего кода, но с чего вы взяли что они везде и всем подойдут? Это очередная обертка над итак простым существующим инструментом. Зачем мне учить все эти ваши start end fi fs и держать эту кучу мусора в голове, если есть общеизвестный и принятый формат?
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.07.2013, 09:13  [ТС] 9
мы же все каждый день пишем какие-то методы для упрощения и удобочитаемости своего кода
вот она истина!

получается что ВСЕ повсеместно что то используют, причем об этом никто не говорит, ибо стесняются что не так поймут

но такие инструменты могут называться "быдлокодом" до тех пор, пока на них нет документации, именно это отличает их от стандартных методов!

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

----

по прежнему жду пример тривиальной задачи в которой используются вложенные предикаты, для улучшения инструмента
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
10.07.2013, 10:50 10
Уважаемый, неужели вы не видите, что возражения вызывает не само стремление облегчить работу, а исключительно ПУТЬ. Ну не упрощают дефайны жизнь. Особенно окружающим. Поймите, наконец, что скорость РАЗРАБОТКИ очень слабо связана со скоростью НАБОРА текста (или его длиной, что в общем-то одно и то же). Поэтому простым ПЕРЕИМЕНОВАНИЕМ сущностей можно только запутать коллегу, но никак не облегчить себе жизнь. Вы сейчас напоминаете географа, который вместо того, чтобы выучить названия городов слабо знакомой страны, берет карту и поверх старых имен коричневым карандашиком старательно вписывает свои. А вы подумали о тех, кто и без этих нововведений отлично ориентируется по старым именам? Им же придется заново карту учить и к новым именам привыкать. Когда Vorona писал фразу, которую вы процитировали, уверен, он имел в виду совсем не то, что вы. Хотя бы потому, что упомянул удобочитаемость
А вообще, найдите человека по имени alexpac26 и начните с ним какой-нибудь совместный проект. Если это не ваш второй ник, вы с ним сработаетесь. Если это тоже вы, сработаетесь тем более Только не подеритесь если у вас обнаружится 2 разных макроса для обозначения, ну например, NSString.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.07.2013, 11:42  [ТС] 11
Поэтому простым ПЕРЕИМЕНОВАНИЕМ сущностей можно только запутать коллегу, но никак не облегчить себе жизнь
mobidevelop, конструктивной критики, без перехода на личности, не будет?

Ну не упрощают дефайны жизнь
а enum и typedef упрощают?

давайте ваще не будем еще ими пользоваться!

---

поставлю вопрос по другому. Очевидно что чтобы например сравнить строку другой строкой на вхожение подстроки без учета регистра требуется написать следущий код:

Objective-C
1
2
3
4
5
    NSString* s = @"Helo world";
    NSPredicate* p = [NSPredicate predicateWithFormat:@"SELF CONTAINS[cd] %@", @"o worl"];
    if ([p evaluateWithObject:s]) {
        // совпадение
    }
требуется одна лишняя строка кода чтобы создать предикат

что если все операции будут сразу в условии?

как лучше это сделать?

так?

Objective-C
1
2
3
4
NSString* s = @"Helo world";
if ([s evaluateString: @"o worl" withPredicate: @"CONTAINS[cd]"]) {
    // совпадение
}
Добавлено через 30 минут
еще такой вариант

Objective-C
1
2
3
if ([s evaluateUsingPredicateWithFormat: @"SELF CONTAINS[cd] %@", @"o worl"]) {
   // совпадение
}
прям высшая степень стандартизации и лаконичности,

- предикат составлен строго по правилами
- название функции использует "стандартные" слова из названий похожих функций
- и самое главное все умещается в одну строку
0
686 / 613 / 43
Регистрация: 13.01.2011
Сообщений: 1,722
10.07.2013, 12:28 12
noname_club, вам уже целая страница конструктива была, это не учитывая прошлую тему про "упрощение обращений к многомерным словарям", а воз и ныне там.
Цитата Сообщение от noname_club Посмотреть сообщение
прям высшая степень стандартизации и лаконичности,
Да, а Ваша выдумка намного удобнее и понятнее, давайте использовать ее и еще 100500 дефайнов в pch файле, ибо не стандарт же, но как же без "упрощения".
Если бы Вы предложили чтото реально стоящее, я первый бы написал что да, это правда круто, и правда стоит использовать.
Однако сейчас я вижу как Вы встали в "позу", и совершенно не прислушиваете к общественности.
Банально, переведите пост и поместите на stackoverflow, gist. Может подержат?
Если да, обещаю вдумчиво все пересмотреть, ознакомится с комментариями я перед Вами извинится за то, что сразу не увидел блестящего решения на мой взгляд несуществующей проблемы.
Но как мне подсказывает здравый смысл - этого(@"Может подержат?") не будет.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.07.2013, 12:37  [ТС] 13
Банально, переведите пост и поместите на stackoverflow, gist. Может подержат
мне вашего мнения достаточно для оценки метода работы с предикатами, спасибо.

давайте использовать ее и еще 100500 дефайнов в pch файле
вы так наивно полагаете что в pch файле будет много лишних #define и они будут вводить в заблужение?

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

вообще идея класса с абстрактными инструментами, которые не зависят от типа приложения не нова я думаю и имеет уже некоторые реализации. И как я выше говорил, нужно лишь написать документацию к классу чтобы сделать его понятным для остальных.
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
10.07.2013, 13:39 14
Цитата Сообщение от noname_club Посмотреть сообщение
mobidevelop, конструктивной критики, без перехода на личности, не будет?
А вот сейчас не понял. Неужели в моем сообщении мало конструктива? И где в нем переход на личности? Или я был прав в своем предположении относительно вашего единства в двух лицах и слово "Переименование" вас так задело? Так я имел в виду переименование методов, а не людей
В общем, я бы на вашем месте извинился за необоснованное оскорбление.
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.07.2013, 13:54  [ТС] 15
Цитата Сообщение от mobidevelop Посмотреть сообщение
Уважаемый, неужели вы не видите, что возражения вызывает не само стремление облегчить работу, а исключительно ПУТЬ. Ну не упрощают дефайны жизнь. Особенно окружающим. Поймите, наконец, что скорость РАЗРАБОТКИ очень слабо связана со скоростью НАБОРА текста (или его длиной, что в общем-то одно и то же). Поэтому простым ПЕРЕИМЕНОВАНИЕМ сущностей можно только запутать коллегу, но никак не облегчить себе жизнь. Вы сейчас напоминаете географа, который вместо того, чтобы выучить названия городов слабо знакомой страны, берет карту и поверх старых имен коричневым карандашиком старательно вписывает свои. А вы подумали о тех, кто и без этих нововведений отлично ориентируется по старым именам? Им же придется заново карту учить и к новым именам привыкать. .....
еще раз
Уважаемый, неужели вы не видите, что возражения вызывает не само стремление облегчить работу, а исключительно ПУТЬ.
1) то есть, идея верная, неверный путь реализации?

Ну не упрощают дефайны жизнь. Особенно окружающим.
2) я так понял все здешние обитатели кроме меня не любят #define и предпочитают запоминать строки и писать @"строка"
тут уж кому как удобно

Поэтому простым ПЕРЕИМЕНОВАНИЕМ сущностей можно только запутать коллегу
3) когда имена переменным придумываете, тоже запутываете коллегу? ибо их имен нет в документации и поэтому никто в них не может логически разобраться?

Вы сейчас напоминаете географа, который вместо того, чтобы выучить названия городов слабо знакомой страны, берет карту и поверх старых имен коричневым карандашиком старательно вписывает свои.
4) неверное сравнение

тут больше подходит проезд в тоннеле под горой, вместо того чтобы лезьть на нее или обходить ее

А вы подумали о тех, кто и без этих нововведений отлично ориентируется по старым именам
это еще не нововведение, вас никто не заставляет переучиваться, просто обсуждаем метод, который возможно будет удобнее, только и всего
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
10.07.2013, 15:31 16
Цитата Сообщение от noname_club Посмотреть сообщение
еще раз

1) то есть, идея верная, неверный путь реализации?
Стремление верное. Верным путем будет написание методов, облегчающих жизнь, прячущих какие-то длинные последовательности, которые приходится каждый раз заново писать. Беда в том, что iOS SDK писали тоже достаточно умные люди, у которых было на это достаточно много времени. Поэтому как-то еще больше оптимизировать их работу достаточно трудно. Не невозможно, но трудно. И фокусы с дефайнами вида #define GOOD = TRUE тут точно не помогут.

Цитата Сообщение от noname_club Посмотреть сообщение
2) я так понял все здешние обитатели кроме меня не любят #define и предпочитают запоминать строки и писать @"строка"
тут уж кому как удобно
В подавляющем большинстве случаев тут много дешевле обойтись строковой константой. Дефайн заставит каждый раз создавать объект, что в циклических операциях может привести к перерасходу памяти и аккумулятора. Если строка используется 1-2 раза за жизненный цикл приложения, можно обойтись дефайном. Но точно не для того, чтобы переименовать уже имеющиеся константы.

Цитата Сообщение от noname_club Посмотреть сообщение
3) когда имена переменным придумываете, тоже запутываете коллегу? ибо их имен нет в документации и поэтому никто в них не может логически разобраться?
Не передергивайте. Это некрасиво. Вы писали о переименовании СУЩЕСТВУЮЩИХ сущностей. Уже поименованных.

Цитата Сообщение от noname_club Посмотреть сообщение
4) неверное сравнение
тут больше подходит проезд в тоннеле под горой, вместо того чтобы лезьть на нее или обходить ее
это еще не нововведение, вас никто не заставляет переучиваться, просто обсуждаем метод, который возможно будет удобнее, только и всего
Сравнение очень верное. Его корректность вы поймете, когда встретитесь с таким же подходом у другого программиста, который уже придумал, как и вы, свой собственный язык и лихо нафигачил на нем проект в пару сотен тысяч строк. Только вот беда - он придерживался других правил именования. Своих каких-то. А вам надо как можно скорее в этот проект включиться.
Так вот, ваш метод лично мне не кажется удобнее. О чем я и написал довольно пространно и, на мой вгляд, доходчиво и аргументированно.
На самом деле, я очень рад за вас видя, что вы мыслите нестандартно и обладаете недюжинной энергией. Я просто стараюсь направить ее в нужное русло. По крайней мере, вывести из ненужного. А интересы - самые что ни на есть шкурные: шарик у нас маленький и с каждым годом все меньше. Вдруг мы с вами один проект писать будем? Или с вашим последователем? Мне не хотелось бы, чтобы он был написан так, как вы призываете.

Вот как-то так...
0
112 / 103 / 12
Регистрация: 01.05.2013
Сообщений: 603
10.07.2013, 16:34  [ТС] 17
Дефайн заставит каждый раз создавать объект
#define же директивы препроцессора, то есть как бы до компилятора доходят уже в расшифрованном, а не ввиде макроса
То есть количество макросов не влияет на скорость компиляции, а только на скорость работы препроцессора которую можно не учитывать вообще

Вы писали о переименовании СУЩЕСТВУЮЩИХ сущностей
это предикаты в макросах или само название метода?

То есть fs_start и fs_end являются переименованными "сущностями" по отношению BEGINSWITH и ENDSWITH ?

согласен чтото мне тоже в них теперь не нравится
0
Peace 2 all shining faces
674 / 535 / 85
Регистрация: 05.03.2010
Сообщений: 1,282
10.07.2013, 21:21 18
Цитата Сообщение от noname_club Посмотреть сообщение
но такие инструменты могут называться "быдлокодом" до тех пор, пока на них нет документации, именно это отличает их от стандартных методов!
уж извините меня, но быдлокодированием я не занимаюсь и всех остальных отучиваю от этого
ваш пример попросту никому не нужен, сегодня вам запятую нужно обернуть в кавычки, завтра сделать так, чтобы где-то экранировались определенные символы, но это настолько конкретные и простые задачи, что попросту нет смысла заниматься таким вот пожертвованием в сторону развития, так сказать, комьюнити ибо я вам могу привести 300 примеров как можно по-разному решить эту проблему в различных ситуациях и вы поймете что все это чисто конкретика

да и нельзя просто взять и все готовые решения выложить в интернет, потому что проблемы всегда разные и вы будете дольше искать решения и разбираться в них, чем их можно написать

допустим, хочу чтобы после каждого запроса с пятым айдишником, отсылался имеил мне на почту и где-то на третьем элементе массива, который вы перебираете пусть пишется в лог какой-то анекдот, чтобы кодилось веселее, так что мне прийдется разобраться в вашем коде и перелопатить этот ущербный метод, чтобы добиться такого результата?

без проблем, создайте что-то действительно универсальное и уникальное, что кому-то пригодится, вот например AFNetworking, JSONKit, RestKit, ReactiveCocoa или Reachability, вот это действительно универсальные инструменты, которые нужны почти всегда
0
182 / 182 / 3
Регистрация: 10.01.2013
Сообщений: 596
10.07.2013, 23:07 19
Цитата Сообщение от noname_club Посмотреть сообщение
#define же директивы препроцессора, то есть как бы до компилятора доходят уже в расшифрованном, а не ввиде макроса
То есть количество макросов не влияет на скорость компиляции, а только на скорость работы препроцессора которую можно не учитывать вообще
Нельзя не учитывать. Пример: макрос вида #define FIELD = @"fieldName". Если в цикле 100 раз встречается макрос field, то во время выполнения 100 раз создастся объект типа NSString со строкой fieldName. Просто потому, что препроцессор заменит его на @"fieldName". И 100 таких объектов попадет в release pool. А если использовать константу вида NSString * const kFieldName = "fieldName"; будет использован один единственный объект, который будет жить пока жив процесс, но при этом не размножится. Теперь разница понятна?

Цитата Сообщение от noname_club Посмотреть сообщение
То есть fs_start и fs_end являются переименованными "сущностями" по отношению BEGINSWITH и ENDSWITH ?

согласен чтото мне тоже в них теперь не нравится
Значит, я не зря по клаве барабанил

Добавлено через 5 минут
Цитата Сообщение от Vorona Посмотреть сообщение
без проблем, создайте что-то действительно универсальное и уникальное, что кому-то пригодится, вот например AFNetworking, JSONKit, RestKit, ReactiveCocoa или Reachability, вот это действительно универсальные инструменты, которые нужны почти всегда
Я бы в этот список еще MKNetworkKit добавил. Тоже достойная вещь. К сожалению, навскидку не могу выдать аналогичную по полезности идею. Но тут дело за вами. Дерзайте, ищите. Благо, энергии, похоже, вагон. Направьте же ее на полезное дело.
0
10.07.2013, 23:07
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.07.2013, 23:07
Помогаю со студенческими работами здесь

Встроенные предикаты. Предикаты взаимодействия, размещение данных
Есть три вопроса: С равенством разобрался, вроде ничего сложного. Про предикаты нашел много...

упрощенный RegexKitLite
phpRegexKitLite.h // PHPregexKitLite #import &lt;Foundation/Foundation.h&gt; #import...

Windows 7 - упрощенный стиль
Как изменить цвет панели задач, если стоит тема &quot;Windows 7 - упрощенный стиль&quot;? Нажимаю &quot;Цвет...

упрощенный тернарный оператор
есть ли в JS какой стандартный подход для - такой элемент &quot;bool ? data : null&quot; , что бы при false...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru