Я предлагаю:
System.Reflection.Assembly thisExe;
thisExe = System.Reflection.Assembly.GetExecutingAssembly();
System.IO.Stream file =
thisExe.GetManifestResourceStream("AssemblyName.ImageFile.jpg");
Image yourImage = Image.FromStream(file);
Из msdn: http://msdn.microsoft.com/en-us/library/aa287676 (v = vs.71) .aspx
Использование Image.FromStream лучше, потому что вам не нужно знать формат изображения (bmp, png, ...).
Здесь вы объявляете переменную экземпляра с именем aVar
:
@interface myclass : UIImageView {
int aVar;
}
Теперь вы можете использовать эту переменную в своем классе:
aVar = 42;
NSLog(@"The Answer is %i.", aVar);
Однако в Objective-C переменные экземпляра являются приватными. Что делать, если вам нужно, чтобы другие классы могли получить доступ и/или изменить aVar
? Так как методы в Objective-C являются публичными, то ответ заключается в том, чтобы записать метод доступа (getter), который возвращает aVar
, и метод мутатора (setter), который устанавливает aVar
:
// In header (.h) file
- (int)aVar;
- (void)setAVar:(int)newAVar;
// In implementation (.m) file
- (int)aVar {
return aVar;
}
- (void)setAVar:(int)newAVar {
if (aVar != newAVar) {
aVar = newAVar;
}
}
Теперь другие классы могут получить и установить aVar
с помощью:
[myclass aVar];
[myclass setAVar:24];
Запись этих методов доступа и мутатора может стать довольно утомительной, поэтому в Objective-C 2.0 компания Apple упростила ее для нас. Теперь мы можем написать:
// In header (.h) file
@property (nonatomic, assign) int aVar;
// In implementation (.m) file
@synthesize aVar;
...и методы доступа/мутатора будут автоматически сгенерированы для нас.
Подводя итог:
int aVar;
объявляет переменную экземпляра aVar
@property (nonatomic, assign) int aVar;
объявляет методы доступа и мутатора для aVar
@synthesize aVar;
реализует методы доступа и мутатора для aVar
Я не могу говорить за стороной WSDL, но вы можете рассмотреть Metawidget для со стороны поколения формы: после того, как вы выделяете и анализируете WSDL, вы можете Нажмите в Metawidget и получите много добра для пользовательского интерфейса бесплатно (поддержка разных платформ, различных библиотек виджетов и т. Д.)
С уважением,
Ричард.
-121--3926620-@Interface объявляет экземпляры переменных класса в OBJ-C. Вам нужно, чтобы создать переменную экземпляра. Однако переменная не видна вне класса по умолчанию (поскольку поле по умолчанию защищена).
@Property сообщает компилятору, чтобы указать конкретный метод доступа к свойствам (Get / Set). Тем не менее, вам нужно будет использовать @synTheSize на самом деле, чтобы компилятор автоматически генерировать простые доступности, в противном случае вы, как ожидается, создадут их самостоятельно.
Это объявляет переменную экземпляра в вашем объекте:
@interface myclass : UIImageView {
int aVar;
}
Переменные экземпляра являются частными деталями реализации вашего класса.
Если вы хотите, чтобы другие объекты могли читать или установить значение переменной экземпляра (IVAR), вы можете объявить его в качестве свойства:
@property int aVar;
Это означает, что компилятор ожидает, чтобы увидеть методы доступа к сетте и доступу недвижимость.
Когда вы используете ключевое слово @synThesize, вы просите компилятора автоматически генерировать методы Access accessor и Getter.
Итак, в этом случае компилятор будет генерировать код, аналогичный этому, когда он столкнулся с ключевым словом @synThesize:
- (int) aVar
{
return aVar;
}
- (void)setAVar:(int)someInt
{
aVar = someInt;
}
по умолчанию на iPhone (и на 32-битной среде выполнения на Mac), @synThesize
Требуется присутствующая переменная экземпляра для хранения значения свойства. Этот Ивар обычно назван таким же, как имущество, но не должно быть, например, вы могли бы сделать это:
@interface myclass : UIImageView {
int aVar;
}
@property int someValue;
@synthesize someValue = aVar;
ни @synThesize
, ни @Property
на самом деле требуются , вы можете создать свои собственные методы Getter и Setter, и если вы создаете их, используя их, используя синтаксис, совместимый с кодированием клавиш, свойство все равно будет использоваться.
Требование для присутствия ивера Ивара, а также @Property
@Property Декларация , является хрупким базовым классом ограничения 32-битной среды выполнения объекта-C на обоих Mac и iPhone. С 64-битной средой выполнения на Mac вам не нужен Ивар, @synThesize
генерирует один для вас.
Обратите внимание, что есть многочисленные ключевые слова, которые вы можете использовать с вашим @Property
объявлением, чтобы контролировать, какой тип синтезированного Accessor Code создается, например readonly
для доступа для доступа, Копия
, атомный
, нетомический
И так далее. Более подробную информацию находится в языке программирования объекта-C 2.0 .
Классы могут иметь переменные экземпляра (ivars). Они находятся в первом разделе и видны только коду в этом классе, но не внешнему коду. Мне нравится ставить перед ними знак подчеркивания, чтобы показать их внутреннюю сущность. Говоря языком низкого уровня, ivars добавляются в качестве дополнительного члена к структуре, которую создаваемый вами класс использует для внутренних целей.
Второе объявление, @property, является объявленным свойством. Это не обязательно (кроме случаев, когда вы используете @synthesize), но это помогает другим программистам (и компилятору!) Знать, что вы имеете дело со свойством, а не только с двумя методами -setAVar
и ] -aVar
, альтернативный способ сделать это.
В-третьих, @synthesize фактически создает методы для установки и доступа к свойству извне класса. Вы можете заменить это своими собственными методами установки и получения, но делайте это только при необходимости, поскольку встроенные имеют некоторые функции, которые в противном случае вам пришлось бы кодировать самостоятельно.Фактически, используя синтаксис @synthesize aVar = _someVariable;
, вы можете сделать так, чтобы ваше свойство действительно ссылалось на переменную экземпляра с другим именем!
Краткая версия: @property - это просто намек для компилятора и других программистов, что вы создаете свойство, а не только методы получения / установки. Переменные экземпляра являются внутренними по отношению к классу, и в противном случае к ним невозможно получить доступ извне. @Synthesize просто создает для вас простые геттеры и сеттеры для использования с вашим @property, но вы также можете просто кодировать эти геттеры и сеттеры, как и любой другой метод.