Pull to refresh
29
0
Олег Трахман @Trahman

User

Send message
Здорово, например, что можно будет вместо
BLABlahBlahBlahViewController *blah = [[BLABlahBlahBlahViewController alloc] initWithStyle: BLABlahBlahBlahViewControllerFancyStyle];

писать
var blah = BlahBlahBlahViewController(style: .fancy)


Вообще с objective-c дикое количество boilerplate'а выходит.
Objective-c блоки и c++ лямбды


Строго говоря, блоки не являются частью Objective-C, это расширение языка C.
Blocks (C language extension)
Yandex едет, едет сквозь снежную равнину,
Cocaine целебный людям он везёт.
И ещё, интересно, насколько хороши SpriteKit, UI***Behavior и другие новые «игровые» API iOS 7.0 для разработки 2d игр? Насколько они могут заменить Cocos2d + box2d и их аналоги?
@implementation JBViewController {
  UIView *pipeBounds;
  UIDynamicAnimator *blockAnimator;
  
  UICollisionBehavior *blockCollision;
  UICollisionBehavior *groundCollision;
  UIDynamicItemBehavior *blockDynamicProperties;
  UIDynamicItemBehavior *pipesDynamicProperties;
  UIGravityBehavior *gravity;
  UIPushBehavior *flapUp;
  UIPushBehavior *movePipes;
  int points2x;
  int lastYOffset;
  UIAlertView *gameOver;
  
  Boolean firstFlap;
}
...

Ничего себе, получается что переменные класса теперь можно объявлять внутри @implementation? Когда это появилось?
Лень много писать, поэтому цитата:

— Вам не приходилось слышать про Федерика Тернера?
— Нет, сэр.
— Он был историком. Лет сто назад он придумал теорию о границе. Граница — это нечто вроде
предохранительного клапана цивилизации, чтобы мы совсем не сошли с ума. Когда появляются
люди, неспособные жить, как все — безумцы, недовольные, экстремисты — они устремляются на
границу. Вот как рождалась Америка: все сумасшедшие бунтари в Европе собрались и отправились
на границу, из которой родились 13 колоний. Потом самые непоседливые двинулись дальше на
запад. Поэтому в конце концов все психи оказались в Калифорнии.
Тернер умер в 32-м, так что не увидел, что стало с миром, в котором кончились новые границы.
Некоторые говорят, что есть еще граница разума. Они изучают чудесный мир наркотиков и
алкоголя, но это не та граница, очередной самообман. Мы придумали ложную границу с
компьютерами, которая позволяет людям думать, что они сбежали, граница с платой за доступ.
— А космос — последняя граница?
— Стартрек — это не космос, это телевидение. Тоже не граница. И потом — сколько народу
побывало в космосе? Нет-нет-нет, настоящая граница здесь. Автострада 60 — вот зачем ее
построили. Это место для тех, кому хочется жить по-другому.
— А это правда, мистер Коди?
— Если нет, то должно быть...

Трасса 60

P.S. куда денется The Pirate Bay, когда какая-нибудь держава принесет «демократию» на их беспилотники, летающие в нейтральных водах? Куда поедет Сноуден или очередной Ассанж?
Спасибо!
Лучше бы я сам не написал.
А чем плохо переопределять сеттеры/геттеры? Или что в этом примере такого криминального? Мне правда интересно.
А если кто-то, допустим, переопределит (в категории или в унаследованном классе) ваш обычный мутатор вот таким образом?

- (void) setProperty: (MyClass*) property
{
    _property = property;
    _property.delegate = self;
}


Такого не может быть?
Это было давно и неправда сделано через +initialize, когда не было еще ни GCD, ни блоков…
В простых случаях, таких как «чистые» геттеры в init, например, ничего плохого не может случится.

Но есть более сложные ситуации, и одна из них произошла у меня в реальном проекте. Я подробностей уже не помню, помню что в методе init я регистрировал свой класс-«одиночку» в KVO.

Вскоре обнаружилось, что в рантайме у меня создавались два инстанса синглтона. С тех пор я в init ничего лишнего не пишу.
тоже об этом подумал, но уже после того как написал сообщение. :(
self.foo = @"Bar";
Это тоже плохая практика, по своему. Во время инициализации self находится в «подвешенном» состоянии, и пока инициализация не закончена, лучше не посылать ему сообщения. Считаю что первый вариант (с ivar и проверкой self) лучше.
Don’t Message self in Objective-C init (or dealloc)
qualitycoding.org/objective-c-init/
// Выделяем память, заполненную нулями
void *newObject = calloc(1, class_getInstanceSize([TestObject class]));
// Задаём isa прямой записью в память
Class *c = (Class *)newObject;
c[0] = [TestObject class];
// Здесь __bridge_transfer-каст нужен для передачи объекта в ARC - иначе утечёт
obj = (__bridge_transfer TestObject *)newObject;
// Посылаем init - объект готов!
obj = [obj init];

Неактуально.

www.sealiesoftware.com/blog/archive/2013/09/24/objc_explain_Non-pointer_isa.html
On iOS for arm64, the isa field of Objective-C objects is no longer a pointer.
Say what?

On iOS for arm64, the isa field of Objective-C objects is no longer a pointer.
If it's not a pointer anymore, what is it?

Some of the bits still encode the pointer to the object's class. But neither OS X nor iOS actually uses all 64 bits of virtual address space. The Objective-C runtime may use these extra bits to store per-object data like its retain count or whether it has been weakly referenced.
Why change it?

Performance. Re-purposing these otherwise unused bits increases speed and decreases memory size. On iOS 7 the focus is on optimizing retain/release and alloc/dealloc.
What does this mean for my code?

Don't read obj->isa directly. The compiler will complain if you do. Trust the Compiler. The Compiler is your friend. Use [obj class] or object_getClass(obj) instead.

Don't write obj->isa directly. Use object_setClass() instead.

If you override +allocWithZone:, you may initialize your object's isa field to a «raw» isa pointer. If you do, no extra data will be stored in that isa field and you may suffer the slow path through code like retain/release. To enable these optimizations, instead set the isa field to zero (if it is not already) and then call object_setClass().

If you override retain/release to implement a custom inline retain count, consider removing that code in favor of the runtime's implementation.

The 64-bit iOS simulator currently does not use non-pointer isa. Test your code on a real arm64 device.
Именно поэтому например людям так трудно выучить английский, хотя это самый примитивный и тупой язык на планете.
И откуда только берутся такие заблуждения? Это какой-то квасной патриотизм, или что?
Из комментариев к видео:
She 80% a game. Dump her bro, you don't want that kind of person in your life.
Отправил когда-то вот такое письмо:

Hello Erica.
I'm a russian iOS software developer. I'm going to write an article concerning iOS development, especially undocumented features. As you appear to be significant (probably most significant) person in this area, I considered to append references to your books, blog and GitHub projects to my article. My article is to be written in russian, and I should adopt your name to russian language.

Therefore, my question is: How do you pronounce your second name?
I mean, does it sound more like word «sudden» or «sah dune»? Or maybe quite different? BTW, I'm familiar with phonemic notations (like IPA).

Of course I'll add your name in original spelling, too.
With best regards, Oleg Trakhman.

А вот какой ответ получил :))
Zdravstvoi!

It's sah-DOON

Spaceba, — E


Не часто пишу письма, а на английском тем более, но это было забавно :)

Хочу написать дополнение к посту, в которой написал бы всю подноготную этих 5 строчек, но пока не хватает времени.

1) Apple Review Team проанализирует программу статическим анализатором (nm/strings/otool/grep), найдут строчки "_statusBar" и ''_currentRawData", и поймут что программист обращаются к приватным переменным. С моим подходом такого не произойдет. В каком-то смысле это обфускация.
2) Хотелось создать интригу, чтобы хабралюди сами попытались разобраться, что происходит.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity