1. Objective C / Говнокод #10400

    −83

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    + (void) playMovieWithResourceFile: (NSString *) file
    {
        const char *source = [ file cStringUsingEncoding: [NSString defaultCStringEncoding] ];
        size_t length = strlen( source );
        
        char *str = malloc( sizeof( char) * (length + 1)  );
        memcpy( str, source, sizeof (char) * (length + 1) );
        
        char *type = strstr( str, "."); 
        *type = 0;
        type++; //< now we have extension in type, and name in str cStrings
        
        NSAutoreleasePool *pool = [NSAutoreleasePool new];
        NSString *sName, *sType;
    	
        sName = [ NSString stringWithUTF8String: str ];
        sType = [ NSString stringWithUTF8String: type];
        [self playMovieWithName: sName Type: sType];
        
        // free str, but do not free type - it is a part of str
        free( str );
        
        [pool release];    
    }

    Вроде бы серьезный проект cocos2d-extensions https://github.com/cocos2d/cocos2d-iphone-extensions
    Отрезаем расширение у файла :)

    Или я что-то не понимаю…

    Запостил: pilot34, 29 Мая 2012

    Комментарии (10) RSS

    • Ох какой знатный велосипед.
      Ответить
    • Вот, Тарас, вот тебе пример программы, в которой совершенно без повода используют байтоёбство!

      Автор пишет так, как будто в NSString нет какого-нибудь substring'а. Я вот objective C совершенно не знаю, но предполагаю, что он там есть. А в лучшем случае там где-то в модулях есть и разбиение пути на папку, имя файла и расширение...

      > free str, but do not free type - it is a part of str
      Какой дельный комментарий, я бы никогда не догадался об этом из строки 9, и освободил type...
      Ответить
      • Это скорее велосипедизм, чем байтоёбство.
        Ответить
        • > *type = 0;
          Разбиение строки на две путем выкалывания байта. Чем не байтоёбство?
          Ответить
          • Разбиение строки на подстроки через выкалывание - неплохой метод.
            Ответить
            • Метод то хороший, но не в случаях, когда ради этого приходится копировать строку в новый буфер, а потом еще раз копировать куски.

              Тупой как валенок код с двумя сабстрингами в данном случае был бы и проще, и понятней и эффективней.

              Каждому алгоритму есть своё место.
              Ответить

    Добавить комментарий