でも、NSStringからセレクターとクラスを生成できるからそれ格納しておけばおっけーですね!
Aclassname = @"TestView"; Bselectorname = @"TestMethod"; Class Aclass = NSClassFromString(Aclassname); SEL Bselector = NSSelectorFromString(Bselectorname);
Aclassname = @"TestView"; Bselectorname = @"TestMethod"; Class Aclass = NSClassFromString(Aclassname); SEL Bselector = NSSelectorFromString(Bselectorname);
#define TES(__OBJ1,__OBJ2) {\
if(__OBJ1!= __OBJ2){\
[__OBJ1 release];\
__OBJ1 =[__OBJ2 retain];} }
-(void)viewWillAppear:(BOOL)animated{
[super viewWillAppear:animated];
NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab0
}
-(void)viewDidAppear:(BOOL)animated{
[super viewDidAppear:animated];
NSLog(@"nowTabIndex:%d",tabBar.selectedIndex);//この時点ではtab1
}
-(void)firstEnum:(NSDictionary *)dict{
for(NSString * keyname in dict){
NSLog(@"キーは%@",keyname);
}
for(id obj in [dict allValues]){
NSLog(@"オブジェクトは%@",obj);
}
}
-(NSMutableArray *)testes{
NSMutableArray * returnArr = [NSMutableArray array];
@try{
for(int Cnt= 0;Cnt<100;Cnt++){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc]init];
//[returnArr addObject:@"なにか"];
NSLog(@"%d番目は%@",Cnt,[returnArr objectAtindex:Cnt]);//←例外発生
[pool release];//ここにはこない
}
}@catch (NSException * e) {
NSLog(@"%@",e);
}@finally {
//pool解放なし
}
return returnArr;
}
…逆に今までfinallyに書いてたからクラッシュしてたのかしらー。/*---------監視するクラス---------*/
//ViewControllerの場合はwillAppearその他はinitでキー監視の宣言
-(void)viewWillAppear:(BOOL)animated{
KansiClass * kansi = [[KansiClass alloc] init];
//キー値監視登録
[kansi addObserver:self forKeyPath:@"keyPath"
options:0 context:NULL];
}
//監視キーに変更があった場合に呼び出される
-(void)observeValueForKeyPath:(NSString*)keyPath
ofObject:(id)object
change:(NSDictionary*)change
context:(void*)context{
if([keyPath isEqualToString:@"keyPath"]){
//値変更したらこのクラスでやりたいことを記述
}
}
-(void)dealloc{
//登録の解除
[kansi removeObserver:self forKeyPath:@"keyPath"];
[kansi release];
[super dealloc];
}
/*---------監視されるクラス内---------*/
-(void)changeKansi{
[self willChangeValueForKey:@"keyPath"];
//監視値の変更
kansiValue = FALSE;
[self didChangeValueForKey:@"keyPath"];
}
animeView.transform = CGAffineTransformIdentity;で初期状態にもどる
-(void)startAnime:(UIView*)animeView{
//開始前に縮小しておく
animeView.transform = CGAffineTransformMakeScale(0.1, 0.1);
//アニメーション設定開始
[UIView beginAnimations:nil context:NULL];
//アニメーションの秒数
[UIView setAnimationDuration:0.3];
//動きの設定
[UIView setAnimationCurve:UIViewAnimationCurveEaseOut];
//delegate設定(endAnimeがいらないならnilでOK)
[UIView setAnimationDelegate:self];
//アニメーション終了後にやりたい処理
[UIView setAnimationDidStopSelector:@selector(endAnime)];
//90度回転しながら元の大きさに拡大
CGAffineTransform transform1,transform2;
transform1 = CGAffineTransformMakeRotation(M_PI * 90 / 180.0f);
/*
//ちなみに移動はこれ
transform1 = CGAffineTransformTranslate(transform1, 128, 128);
*/
//拡大
transform2=CGAffineTransformMakeScale(1.0, 1.0);
//transformの合成
CGAffineTransform concat =
CGAffineTransformConcat(transform1, transform2);
//transformの適用
[animeView setTransform:concat];
//アニメーション設定終了
[UIView commitAnimations];
}
-(void)endAnime{
//アニメーション終了後にやりたい処理を書く
}
// Debbugログ出力切り替え
#ifdef DEBUG
# define NSLog(...) NSLog(__VA_ARGS__)
#else
# define NSLog(...) {}
#endif
//登録(didloadなどで)
[[NSNotificationCenter defaultCenter] addObserver:class
selector:@selector(yobimethod:) name:@"notificationName" object:nil];
/*class内*/
-(void)yobu{//呼び出し※引数はなくてもOK
NSDictionary *userInfo =
[NSDictionary dictionaryWithObject:obj forKey:@"objkey"];
[[NSNotificationCenter defaultCenter] postNotificationName:
@"notificationName" object:nil userInfo:userInfo];
}
//呼び出されるメソッド
-(void)yobimethod:(NSNotification *)notification{
NSString*key = [[notification userInfo] objectForKey:@"objkey"];
}
#import <QuartzCore/QuartzCore.h>//使用クラスにインポートの必要あり
-(void)createKadomaru{
UIView * maru = [[[UIView alloc] initWithFrame:CGRectMake(0,0,100,100)] autorelease];
maru.center = self.view.center;
maru.backgroundColor = [UIColor whiteColor];
maru.layer.cornerRadius = 4.0;//角の丸み 値が大きいほど丸い
maru.clipsToBounds = YES;
[self.view addSubview:maru];
}
←完成はこんな感じ。#ifdef DEBUG NSLog(@"debugはこっちを通る"); #else NSLog(@"release,distributionはこっちを通る"); #endif
NSArray * array=[NSArray arrayWithObjects:
@"a",@"b",@"c",@"d",@"e",nil];
for(NSString*obj in [array reverseObjectEnumerator]){
NSLog(@"word=%@",obj);
}
eから順にaまで出力されます。よしよし。BOOL stringflg = [obj isKindOfClass:[NSString class]];
//全再描画 [drawView setNeedsDisplay]; //一部再描画なら [drawView setNeedsDisplayInRect:CGRectmake(0,0,100,100)];をする。注意したいのはdrawViewが元々透明でなければ
drawView.opaque=YESdrawRectで描いたものはUIViewの背景色みたいな扱いだから
int c = ( a>b ? a+b : a-b); NSLog(@"c=%d",c);
[[NSNotificationCenter defaultCenter] removeObserver: self];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"notificationname" object:nil];