Pull to refresh
201
0
Владимир Пузанов @farcaller

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

Send message
Ну, очевидно, у dropbox это все тоже есть. У обоих нет опционального облака.
«На память» лучше «аппаратный» биткоин, см. casascius.com
А можно какое-то сравнение z-wave, zigbee, bt 4.0 le? Хотя бы вкратце? Потому как тоже смотрю в сторону home automation, и тут столько вариантов, что глаза разбегаются.
Интересный метод описан на www.youneedabudget.com/ (заодно и софтинка для этого дела есть).

Вкратце – вы живете на деньги, полученные в прошлом месяце, и планируете куда потратить деньги в следующем (по большему счету, если у вас нет кредитной карты – то вы всегда так и жили). Интересный момент это то, что важно бюджетировать все деньги на конкретные цели, а прогноз помогает анализировать ситуацию.
Они легко решили эту проблему – в текущей версии Glass нет ни GSM, ни CDMA :-)
Я знаю. Я даже послал себе код на американский номер, но он еще не пришел :)
А зачем вот это пафосное поле для ввода номера телефона, если код страны ограничен одним символом?

Если СМС только по РФ – то надо бы сделать часть с +7 не редактируемой.

Если международные – то надо бы дать возможность ввести международный номер.
Скопировать файлы приложения туда, где их найдет Springboard – это совершенно не проблема. Проблема только с цифровой подписью, а обойти ее уже существенно проблематичнее. Если конечно этот механизм не был отключен целиком во время джейла.
Ну симлинки, кстати, можно урезать с чистой совестью, они, по идее, не используются.
Дело в том, что у остальных секций иногда есть легитимные права на изменения (и да, там не ELF, там Mach-O, но не суть). Но идея в библиотеке без __text просто шикарна, конечно.
Часто при эксплуатации уязвимостей приходится перебирать какой-нибудь параметр


Это вы о «fuzzing». В данном случае, ASLR к эксплойту не имеет отношения. ASLR вообще защищает от «повреждений памяти», например buffer overrun. Защита обеспечивается тем, что мы имеем возможность выполнить буквально несколько инструкций, и мы не знаем внутреннее состояние процесса (где в памяти что лежит).
Старался переводить понятным языком. Давайте уточню какие-то моменты?
Во вступлении имелось в виду, что проникновение сделано без участия memory corruption, как это делалось в джейлах ранее.
Правильно я понял, что iOS проверяет права доступа только у символьных ссылок, а не у файлов, на которые они ссылаются


Нет, тут скорее вопрос побега из «песочницы». Права у фалов бекапа вообще не проверяются.

Получается, что Apple может очень просто закрыть дыру пофиксив функцию PairRequest


Да, скорее всего.
Я повторяю еще раз – плюс за старания. Минус – за содержимое. Старайтесь еще!
TL;DR: Статья очень плохая, потому что внутри мешанина всех и вся. Кроме того,
хотя знание С было заявлено как не нужное, а дальше идет куча ляпов из-за не
знания С.

Автору – вы учитесь и на правильном пути. копните глубже в фундаментальные вещи,
это позволит вам лучше понять природу вещей. Ничего в программировании не
происходит «автоматически». Докапывайтесь до причин, это весьма полезные знания.

> Начало: метод класса и метод экземпляра

Интересное «начало», учитывая какие темы рассматриваются дальше.

> Класс для Objective-C, часто можно интерпретировать как объект и наоборот

Очень сложное к пониманию предложение.

> есть классы, которые нельзя назвать объектами. Они называются «протоколы»

Протокол нельзя «создать», потому в данном случае сравнение не корректно.

> Различие состоит в том, что «протокол» не может иметь подкласс или дочерний
> объект

То что вы не сталкивались с иерархией в протоколах, не значит, чо ее нет ;-)

И да, «дочернего объекта» у протокола может и не быть. Но можно «привести» тип
объекта к протоколу.

> Вот те методы, которые со знаком "-" мы активно применяем как в отношении
> объектов — экземпляров класса, так и отношении самого класса

Нет, методы с "-" нельзя применять к классу.

> Любой другой объект в Objective-C по определению — потомок NSObject

Нет. И да, я понимаю что вы пытаетесь написать статью для новичков, но новички
с заведомо ложными убеждениями – это большая проблема для нас в будущем.

> NSResponder’а тоже могут быть дочерние объекты

Наверно дочерние классы?

> выделяет для него место в ОЗУ

Выделяет место в ОЗУ как раз таки +alloc, а не -init.

> выделил для него такой адрес в памяти
> 0x000000000

У вас только что зафейлился malloc, сопротивление бесполезно. В качестве примера
указателя лучше использовать что-то с живыми цифрами.

> Вы будете удивлены тем, чему равняется Ваше «i»

Не буду удивлен. А почему? А потому что я знаю как работает стек. Знать про стек
в языках основанных на С – полезно. Иногда полезнее, чем уметь создавать
сабклассы табличек с кнопочками в ячейках.

> Также будет создан экземпляр объекта «isa»

Нет. isa – это указатель на структуру класса. Она уже создана рантаймом (еще во
время линковки).

> То есть теоретически объект уже есть после применения метода «alloc»

Он практически «есть». Но «существовать» – не значит «быть готовым к
использованию».

> потому что он вроде как есть, но в принципе он равен «nil»

Он не равен nil, я вам точно говорю.

> В файле «Primus.h» объявлены методы:

Не совсем понятно куда пропали ± ил примера. Он не нагляден.

> В отличие от некоторых других языков программирования в Objective-C методы не
> вызываются, а посылаются объектам

Это предложение, в контексте параграфа, лишено смысла, так как не объясняет, в
чем, собственно, разница.

> Скажем это «слабый» тип объекта

Не стоит так говорить, потому что будет сложно ответить на вопрос, что такое
"__weak id".

> Что такое «void»?

void – это тип данных, который фактически обозначает «тут ничего нет». Нельзя
объявить переменную «void» – потому что в ней ничего не будет. Но можно объявить
указатель «void *» – потому что переменная хранит адрес, а вот адрес чего, ее
уже как-то не так сильно волнует. Фактически проблема будет только если этот
указатель разименовать.

Методы возвращают «void» когда они, собственно, не возвращают ничего. В паскале
для них есть отдельный термин – процедура, но обычно ЯП на такое не
размениваются.

> Но не в конце

return можно писать и в конце (хотя в этом и мало смысла, да). Но метод, который
возвращает void не может содержвать в себе код «return XXX;», потому что все что
программист напишет в XXX – осязаемо и имеет смысл.

> Что такое «self»?

Очевидно это указатель на текущий объект в контексте. Или на класс (т.к. класс
тоже объект). Но вы не рассмотрели указатели, потому что они слишком
фундаментальны и принадлежат миру С, так что приходится выкручиваться.

А еще стоило бы сказать про канонические аргументы self и _cmd в любом IMP и все
стало бы проще.

> if (!myPrimus){

в контексте инициализатора в Objective-C эта проверка лишена смысла. Проверяют,
обычно, что [super init] не вернул nil (эта ситуация на самом деле крайне редка
и сейчас больше дань традиции). В вашем коде проверяется что +alloc не вернул
nil, но если он вернул nil, у вас есть намного более существенные проблемы, о
которых надо волноваться в данный момент.

> Для того, чтобы понять можно ли написать «self» или нельзя

В лобом методе можно писать self.

> casserolAndPan:(NSArray)pan

NSArray * же.

> Если есть переменная, например «variable», то задать ей нужное значение можно
> через префикс «set»

Задать значение переменной можно через оператор "->"

self->temperature = 500;

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

> Это можно производить не только через свойства, но и через доступ к ним по
> принципу ключ-значение

KVC в статье, где рассказывается про базовое ООП, как-то несколько лишнее.

> Понятие «runtime» можно охарактеризовать

Нет. Runtime – это дословно «среда исполнения». Это тот код, который выполняет
все то, что в вашем коде остается «за кадром». Этот код, фактически, выполняет
все те «магические» штуки. И не важно, на чем он написан. В случае с
Objective-C, там есть и C++, а у C++ есть свой рантайм.

> [myPrimus initWithGas:gelium temperature:nil];

второй аргумент – это NSInteger, пишите типы корректно.

> Единственная его переменная

NSObject – он не такой простой.

> Затем присвоить ему „nil“, для того чтобы он не взял случайный адрес в памяти. Конструкция
> static dispatch_once_t predicate;

Значит объекту nil надо присваивать, а предикату – нет? А как он тогда работает?
И снова надо копать в С, и в static, и в то, что статические переменные при
запуске приложения будут обнулены.

> [super allocWithZone:nil]

Ну зачем вы еще +allocWithZone: вытащили, +alloc мало?

> опять же присваивая ему «nil» в качестве адреса размещения

Откуда у вас эти идеи берутся? Наверно, от того что вы продолжаете игнорировать
наследие С? PAGEZERO например, сегмент, который применяется для первой страницы
в виртуальном адресном пространстве что бы ловить «бажные» нулевые указатели.

> Методы протоколов Вы не посылаете своему объекту

Что мешает вам это делать? Это вообще нормальное использование протоколов.

> Внутри любого метода протокола может быть любой метод класса

О чем это?

> То есть, метод протокола — это контейнер, в котором находятся любые другие
> методы, собственно как и любой реализуемый Вами метод

Я даже не могу прокомментировать, просто не понятно, что происходит.

> К примеру, нужно сделать так, чтобы Ваша формочка делала что-то, при
> определённых условиях

Формочка – это наследие делфи? Раз уж было упомянуто MVC, то и остальную
терминологию стоило бы причесать.
Я не назову конкретный плагин, но это вполне реально реализовать в рамках доступного API ;)
Окей, я поигрался.

Нативный __weak не работает (вернее работает, но как __unsafe_unretained, ссылаясь на мусор).

Но, MAZeroingWeakRef работает отлично! (как только у него оторвать «фиксы» для использования нативных методов)

Еще есть интересная плюшка с необнулением объектов – RM все кидает в autorelease pool, а создать свой нельзя (потому что он тоже кидает его в авторелиз :) ). Решается так:

id Autoreleased(id(^block)(void))
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    
    id ret = block();
    
    [pool release];
    return ret;
}

Information

Rating
Does not participate
Location
Dublin, Ирландия
Registered
Activity