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

    −169

    1. 1
    2. 2
    3. 3
    4. 4
    + (id) itemWithImage:(UIImage *)image_ // todo: WTF?
    {
        return [[[self alloc] initWithImage:image_] autorelease];
    }

    Концентрация бреда стремится с 100%. Видимо в тот день я особенно сильно не выспался...
    https://github.com/krypt-lynx/KLTileView/commit/468bc14dd0589d1dc9b08c32eb4da490965d5723

    Запостил: krypt, 05 Февраля 2014

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

    • Без контекста непонятно.
      Разве что если self alloc, то вместо id – instancetype можно.
      Ответить
      • Контекст можно по урлу посмотреть.
        self alloc - плохая идея, хотя бы потому, что метод класса, а не экземпляра.
        Контекст по урлу виден. Там ещё тип у initWithImage другой и отличается от того, который объявлен в заголовке.
        Как оно вообще работало - я не представляю.
        Ответить
        • self в + методе и есть класс.
          Ответить
          • У компилятора от такой конструкции рвёт крышу и он начинает искать соответствия имён сообщений не там, где надо. Конкретно тут он решил, что класс self - UIImage, что вызвало некорректный warning
            Ответить
            • Шта? Это у тебя крышу сорвало :) Все всегда так писали, и я всегда пишу [self alloc]. Никаких варнингов.
              Варнинг потому что ты классы перепутал, и у него нет такого метода, я подозреваю.
              Ответить
              • Нет, если в исправленном методе заменить [KLTileViewCell alloc] на [self alloc] то будет вернинг о том, что в initWithImage передаётся указатель типа UIImageVIew* вместо UIImage*, а попытка перейти к определению кинет на конструктор класса UIImage.

                Собственно там куча косяков по одному функционалу и с одними именами классов и переменных сошлись, из-за чего при беглом осмотре не получилось понять, что там вообще происходит.
                Ответить
            • Кокава Фундаменшл Гайд
              https://developer.apple.com/legacy/library/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/CocoaObjects.html#//apple_ref/doc/uid/TP40002974-CH4-SW36
              Ответить
              • Не открывается ссылка. Но это лажа провайдера :(
                Ответить
        • self в статике и есть класс, для параноиков можна [[self class] alloc]. А писать прямо имя класса, потом будут сюрпризы при наследовании.
          Ответить

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