Pull to refresh
17
0
Данил Никифоров @danilNik

Пользователь

Send message
Надеюсь Apple будет добавлять поддержку большего числа методов. Только что решил два кейса через UIAppearance для UINavigationBar и задумался о кастомном UIToolBar, потому что выглядит как костыль:

кейс 1
заменить кнопку Back на маленькую картинку:

[[UIBarButtonItem appearance] setBackButtonBackgroundImage:[[UIImage imageNamed:@"back_nav_button"] resizableImageWithCapInsets:UIEdgeInsetsMake(0.f, 21.f, 0.f, 5.f)]
                                                      forState:UIControlStateNormal
                                                    barMetrics:UIBarMetricsDefault];


resizableImageWithCapInsets нужен для того чтобы нам не отресайзило картинку криво (фактически ее ресайзить не надо, но поскольку это bg image, то она растягивается по умолчанию)

кейс 2
убрать текст с кнопки Back (по дизайну не надо)

[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment: UIOffsetMake(0.f, -44.f) forBarMetrics:UIBarMetricsDefault];
а еще есть одна штука с CGRect интересная:

When accessing the x, y, width, or height of a CGRect, always use the CGGeometry functions instead of direct struct member access. From Apple's CGGeometry reference:

All functions described in this reference that take CGRect data structures as inputs implicitly standardize those rectangles before calculating their results. For this reason, your applications should avoid directly reading and writing the data stored in the CGRect data structure. Instead, use the functions described here to manipulate rectangles and to retrieve their characteristics.
For example:

CGRect frame = self.view.frame;

CGFloat x = CGRectGetMinX(frame);
CGFloat y = CGRectGetMinY(frame);
CGFloat width = CGRectGetWidth(frame);
CGFloat height = CGRectGetHeight(frame);

Not:
CGRect frame = self.view.frame;

CGFloat x = frame.origin.x;
CGFloat y = frame.origin.y;
CGFloat width = frame.size.width;
CGFloat height = frame.size.height;



github.com/NYTimes/objective-c-style-guide советую почитать
Спасибо! Хотя тут сплошные синглтоны, но для быстрой разработки маленьких проектов пойдет — я сам так делал.
Снипет для синглтону сразу режет глаз. Уже давно пользуюсь потокобезопасным определением синглтона через GCD:

+ (id)sharedManager {
    static MyManager *sharedMyManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedMyManager = [[self alloc] init];
    });
    return sharedMyManager;
}
Последний загружает в себя наш тестовый бандл, находит там классы-наследники SenTestCase и дергает за метод setUp в начале, tearDown в конце, а между ними он вызывает все методы, название которых начинается со слова «test».


Маленькое уточнение.
setUp и tearDown вызываются до и после выполнения КАЖДОГО метода название которого начинается со слова «test»
Вот пруф:

Conveniently, you can add a pair of methods to a test suite class that are called before and after each test case method is invoked: setUp and tearDown.
ну они не вдавались в подробности, сами понимаете :) просто сказали что это типа симулятора самолета с множеством экранов, где отображается информация с большой fps и им важно чтобы они работали синхронно и быстро.
Да, я тоже был впечатлен, когда узнал что за движок написали ребята из Томска. Кстати их технологии используют на симуляторах у военных, а у видео карт nvidia и intel есть даже оптимизация под их бенчмарки. Я бы не сказал что им ни чего не светит :)
У меня самого такая проблема была, тут еще важно учитывать психологию. Организму достаточно употреблять пищу 3-4 раза в день, а если вы поглощены работой, то можно даже забыть про эту потребность. Я за собой заметил, что я часто ел, потому что мне не хватало ощущения комфорта. Маслоу называл это потребностью в безопасности :) За этим, на самом деле, в большинстве случаев стоит психологический фактор, и потом это становиться привычкой. Нужно покопаться в себе.

Если часто есть, это приводит к нарушению секреции желудочного сока, желчи, и прочих жидкостей необходимых для пищеварения. У вас нарушается режим и этих жидкостей либо мало, либо много(изжога, отрыжка), либо они находятся в желудке без пищи(гастрит, язва).

Для того чтобы отвыкнуть от этого действительно хорошо использовать воду. Вот несколько более точных рекомендаций:
1) Выпивайте не больше одного стакана воды каждые пол часа.
2) Добавляйте в воду немного лимона и соли(совсем чуть чуть). Обычная вода это хорошо, но с лимоном и солью полезнее :)
3) Не пейте за 1 час до и 1 час после еды и во время, чтобы не уменьшать огонь пищеварения
Сейчас заболел, работаю дома.
Жду не дождусь бесплатных печенек, тенниса и живого общения с людьми.
Да, написать можно было больше и конкретно про getter и setter, но мне показалась интересной информация о том где мы используем префикс get, хотя казалось бы логичным использовать его для getter'а. Возможно это не так важно как информация о @property/@synthesize, но я не ставил целью собирать важную информацию — она есть везде. Я хотел в одном месте собрать интересные и полезные факты.

К сожалению, на мой призыв добавить другие факты в комментариях ни кто не отозвался.
Если честно, я не знаю что бы ответил на его месте, если бы мне такие вопросы задавали по емейл. Наверное, этот парень был не первый кто спросил.

Но это очень интересно разобраться в чем-то до последнего бита.
Вот вы написали про get/set — а кто мне мешает самому написать свой getter для любого объекта/переменной?

Извиняюсь, не понял вопроса. Ни кто не мешает. Я написал: «Слово get в Cocoa имеет особый смысл: в имени метода Cocoa оно обозначает, что метод возвращает значение посредством указателя, переданного в качестве параметра.»
Поэтому не стоит его использовать в других случаях, если вы конечно не хотите запутать программистов, которые будут читать ваш код.
Хотелось бы понять границу применимости unit тестов. Тут отметили, есть уже готовые инструменты от Apple для автоматизированного тестирования UI в Instruments (UI Automation tests). Было бы круто услышать чем нужно тестировать интерфейс(например, как можно автоматически, за раз протестировать перемещение по всем вью контроллерам и нажатие всех кнопок, мультитачи, смену ориентации), чем дату, чем связи между классами и т.д.
не темнопольный случаем? :)
Можно попробовать поработать с коворкерами — снимать квартиру, так проще самоорганизоваться. Еще у тех кто работает дома один, теряется частично социализация и потом сложно будет работать с людьми. Поэтому нужно общаться с людьми в живую.
StackOverflow достаточно часто дает fast fix'ы или даже workaround'ы и не претендует на полноту изложения вопроса.

Поэтому спасибо автору за такое полное описание проблемы и несколько решений!
Спасибо, интересно и важно! Работа с памятью изменилась с появлением Storyboard. Раньше я дата сорсы объектами хранил в xib'е, помимо дата сорсов там было еще удобно хранить дополнительные вьюшки и вьюконтроллеры. В Storyboard изменили логику — теперь там храняться отдельные экраны приложения, а все объекты вне этих экранов не загружаются в память после их выгружения из памяти при memory warning.

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

Вообще молодцы ребята! Спасибо вам! На самом деле в Омске разработчиков много, поэтому спрос на конференции есть.
Ну да, тут мысль можно было развернуть. Спасибо за комментарий! С вами соглашусь тоже на 50%.
Я думаю, что для каждой профессии можно выделить набор компетенций, которые необходимы и развивать их.
Ведь если ты мастер спорта по легкой атлетике, то это не значит, что тебе это поможет в сидячей работе.
Рад, что мой опыт можно применить везде :) Но я считаю, что, в первую очередь, он будет полезен iOS разработчикам.

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

Information

Rating
Does not participate
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity

Specialization

Mobile Application Developer, Product Manager
Senior
From 300,000 ₽
Project management
Development management
Risks management
Kanban
Scrum
Agile
Building a team
Development of tech specifications
Project planning
PMBOK