Да, вы можете. (с):)
Чтобы решение, которое я предлагаю, работало, вам понадобится иметь возможность получить (установить / получить) ваши переменные с помощью методов (это легко сделать с помощью свойств или написания собственных методов установки и получения).
Вот пример:
- (void)performAction:(NSMutableString *)text {
[(UIImageView *)[self performSelector:NSSelectorFromString([text stringByAppendingString:@"Pic1"])] setHidden:YES];
[(UIImageView *)[self performSelector:NSSelectorFromString([text stringByAppendingString:@"Pic2"])] setHidden:NO];
}
Что касается свойств, я на самом деле думал просто дать вам пример кода, чтобы начать использовать эту замечательную функцию Objective C ASAP, что я и сделаю. Хотя я не уверен, что углублюсь в эту тему, потому что для этого может потребоваться слишком много интернет-бумаги, поэтому после примера кода я также добавлю несколько ссылок для дальнейшего чтения.
@interface AClass : NSObject {
// Here's where you declare variables
NSObject *objectForInternalUseWeWantToBeRetained;
id linkToObjectUsuallyNotRetained;
int nonObjectVariable;
BOOL aVariableWithARenamedGetter;
}
// And here's where their properties are declared
@property (nonatomic, retain) NSObject *objectForInternalUseWeWantToBeRetained;
@property (nonatomic) id linkToObjectUsuallyNotRetained;
@property (nonatomic, assign) int nonObjectVariable;
@property (nonatomic, assign, getter=renamedVariableGetter) BOOL aVariableWithARenamedGetter;
@end
@implementation AClass
// Here we command the machine to generate getters/setters for these properties automagically
@synthesize objectForInternalUseWeWantToBeRetained, linkToObjectUsuallyNotRetained, nonObjectVariable, aVariableWithARenamedGetter;
// But you can implement any of the getters/setters by yourself to add some additional behaviour
- (NSObject *)objectForInternalUseWeWantToBeRetained {
// Some additional non-usual stuff here
// And after that we do the getters job - return the variables value
return objectForInternalUseWeWantToBeRetained;
}
// And of course we don't forget to release all the objects we retained on dealloc
- (void)dealloc {
[objectForInternalUseWeWantToBeRetained release];
[super dealloc];
}
@end
// And here's where their properties are declared
@property (nonatomic, retain) UIImageView *testPic1;
@property (nonatomic, retain) UIImageView *testPic2;
@end
Предупреждение: я быстро прошел через суффи. Вот хороший урок в блоге CocoaCast - Свойства в Objective-C 2.0 , который, я думаю, может быть хорошей отправной точкой. Кстати, они предоставляют много учебных материалов (подкасты, скринкасты и т. Д.), Поэтому просмотр их сайта может быть полезным. И, конечно же, основное место, где можно узнать все о Objective-C и какао, - это официальная документация, здесь о свойствах .