В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.
При попытке выполнить один метод объекта , ссылка просит живой объект выполнить этот метод. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. Тогда runtime сообщит вам об этом, выбросив исключение NullPointerException.
Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».
Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему - использовать ссылки this
. Возьмем этот пример:
public class Some {
private int id;
public int getId(){
return this.id;
}
public setId( int newId ) {
this.id = newId;
}
}
И в другом месте вашего кода:
Some reference = new Some(); // Point to a new object of type Some()
Some otherReference = null; // Initiallly this points to NULL
reference.setId( 1 ); // Execute setId method, now private var id is 1
System.out.println( reference.getId() ); // Prints 1 to the console
otherReference = reference // Now they both point to the only object.
reference = null; // "reference" now point to null.
// But "otherReference" still point to the "real" object so this print 1 too...
System.out.println( otherReference.getId() );
// Guess what will happen
System.out.println( reference.getId() ); // :S Throws NullPointerException because "reference" is pointing to NULL remember...
Это важно знать - когда больше нет ссылок на объект (в пример выше, когда reference
и otherReference
оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.
Нет, Вы корректны. В настоящее время, и скорее всего для обозримого будущего, Ruby не будет опцией, по крайней мере, для приложений AppStore. Нет никакой причины, которую Вы не могли сделать, это по Взломанному телефону, но Apple довольно связано узами брака с Objective C для официальной разработки.
Мост Какао Ruby, вероятно, не будет работать. Большинство мостов для динамических языков должно генерировать исполняемых преобразователей (или вручную или с libffi). Более ограниченные мосты (для большего количества статических языков) не могут иметь таких проблем.
Так или иначе, поднимая мост, вероятно, собирается потребовать становления более знакомым со временем выполнения Objective C, чем каждый был бы, просто учась, как записать Сенсорные приложения Какао, который, вероятно, побеждает точку выполнения его во-первых.
Существует открытый исходный код мост Какао Ruby , Вы могли бы попытаться получить работу. Но я заключаю, что существует что-то вроде несоответствия импеданса между Ruby и ObjC, который делает немного неудобным использовать.
Вы не должны использовать Objective C для записи приложений для iPhone. При использовании QuickConnectiPhone, http://sourceforge.net/projects/quickconnect/ , можно записать его полностью в JavaScript, CSS и HTML и все еще иметь устанавливаемое приложение не веб-приложение.
, Если Вы знаете рубин, Вы уже, вероятно, работаете с JavaScript.
, Чтобы видеть, как установить его, выполните его, и другие идеи переходят к tetontech.wordpress.com
Я предполагаю, что это не будет работать правильно теперь, но я предположил бы, что Вы в конечном счете будете в состоянии использовать MacRuby для создания приложений для iPhone. Apple помещает большую работу в него
, Вот ссылка на статью ADC, описывающую, как создать нормальные приложения какао
На самом деле рубиновый мост какао не является неловким вообще; вещи работают замечательно гладко, право вниз на соединяющиеся выходы в IB и т.д. Получающийся код снижается на красивое право.
Что касается разработки iPhone, если Вы хотите официальное приложение AppStore, Вы являетесь неудачливыми, к сожалению. Apple, продиктованная тот iPhone, является Касанием Obj-C/Cocoa, и существует пункт в лицензии SDK, говоря, что одна из вещей, для которых они будут отклонять приложение, имеет ИНТЕРПРЕТАТОР/JIT-КОМПИЛЯТОР языка, таким образом, Вы не могли добавить рубиновый интерпретатор в своем приложении сами.
Вне темы, но весело, это - то, почему Flash для iPhone является Adobe, уносящий дым. Они не могли получить swf плеер на AppStore, даже если бы они хотели на лицензию Apple.
rhomobile является опцией выполнить код Ruby на iPhone, но это - разработка чрезвычайно веб-приложения. Веб-сервер работает локально на iPhone и Вашем рендеринге кода Ruby к стандартным клиентским веб-технологиям (html/css/javascript).
Вы более обеспечены как программист, знающий, что много различных языков - думают о Objective C как о хорошей возможности изучения.
я нашел, что вещи, которые Вы изучаете на других языках часто, делают Вас лучшим программистом и дают Вам новое понимание других языков, которые Вы уже знаете.
В iPhone OS, mprotect () перестанет работать, при попытке использовать ее для маркировки перезаписываемых разделов памяти как исполняемый файл. Это повреждает мосты как RubyCocoa (и вероятно MacRuby) что использование libffi для создания обработчиков методов Objective C во времени выполнения. Я полагаю, что это дизайном, потому что он не всегда имел место.
В конечном счете, это - больше вопрос политики платформы, чем технология, но техническое обходное решение для этого существует. Вместо того, чтобы генерировать обработчики пользовательских методов во времени выполнения, предварительно скомпилируйте пул реконфигурируемых, которые назначены необходимый, по существу делая процесс образования моста совершенно управляемым данными. Насколько я знаю, это еще не делается в RubyCocoa или MacRuby.
Другая значительная вещь рассмотреть состоит в том, что скомпилированный Ruby и время выполнения RubyCocoa могут быть значительно больше, чем скомпилированные приложения Objective C. Если бы эти библиотеки были доступны на iPhone, это не было бы проблемой, но на данный момент, даже если бы у Вас была работа RubyCocoa, Вы не могли бы хотеть использовать его для приложений, которые Вы распределяете.
Мм, Rhodes (Rhomobile) действительно позволяет создавать собственные приложения на iPhone и всех других смартфонах. Да, мы используем рендеринг через элемент управления WebUIView. Но мы разрешаем все возможности устройства и синхронизируемые локальные данные.
Возможно, вам стоит взглянуть на shinycocos . Это дочерний проект cocos2d-iphone , среды программирования игр Objective-C для iPhone.
Я еще не играл с ним, но из git README я сделал вывод, что он включает Ruby 1.9.1 в ваше приложение.
Одним из возможных решений может быть создание приложения-оболочки, например, библиотеки рисов (google it), которая включает ruby-vm. Я считаю, что вы сможете создавать оболочки C ++, которые можно будет открыть для ruby, тем самым создав среду для разработки iphone с помощью ruby. Это, вероятно, потребует много работы ^^
Посмотрите на http://www.appcelerator.com/products/titanium-mobile/. "Родные приложения для iPhone и Android, созданные с помощью веб-технологий."
Звучит неплохо, не правда ли? ;-)
Я установил пакет ruby из Cydia на свой iPod Touch 1G с джейлбрейком на 3.1.3:
Кажется, работает.
Что касается прикосновения к какао, я полагаю, это совсем другая история.