これでは気軽にprintfデバッグでいろいろなコンソールプログラムやライブラリが作れません。
そこで、iPhone用のmain関数が実行できるソースコードを作ってみました。
どこまでObjective-CでどこからC言語にするか非常に迷います。
あとでもう少しコードを整理しよっと。
-----------
//
// ViewController.m
// HelloUITextView
//
// Created by yomei on 2014/09/04.
// Copyright (c) 2014年 yomei. All rights reserved.
//
#ifdef __APPLE__
#import "ViewController.h"
#endif
#include <stdio.h>
#ifdef __APPLE__
#include <unistd.h>
#endif
#ifdef __APPLE__
#define main mymain
#endif
void mysleep(int s)
{
#ifdef __APPLE__
sleep(s);
#endif
}
void print(char* str)
{
if(str==NULL)return;
#ifdef __APPLE__
[ViewController print:str];
#else
printf("%s¥n",str);
#endif
}
int main(int argc,char* argv){
int i;
char buf[256];
print("Hello iPhone World!");
for(i=0;i<3;i++){
sprintf(buf,"main i=%d",i);
print(buf);
mysleep(1);
}
return 0;
}
//
// object view
//
#ifdef __APPLE__
static UITextView* s_view=NULL;
static ViewController* s_viewcontroller=NULL;
@interface ViewController ()
@end
@implementation ViewController
- (void) print_uithread:(NSString*) str
{
if(s_view==NULL)return;
s_view.text=[s_view.text stringByAppendingFormat:@"%@\n",str ];
}
+ (void) print:(char*) str
{
printf("%s\n",str);
if(s_viewcontroller==NULL || str==NULL)return;
NSString* str2 = [NSString stringWithCString: str encoding:NSUTF8StringEncoding];
[s_viewcontroller performSelectorOnMainThread:@selector(print_uithread:) withObject:str2 waitUntilDone:NO];
}
- (void) run:(NSString*) val
{
main(0,NULL);
}
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect rect= self.view.bounds;
UITextView* textview=[[UITextView alloc]initWithFrame:rect];
textview.editable=NO;
textview.font=[UIFont fontWithName:@"Helvetica" size:14];
textview.backgroundColor=[UIColor blackColor];
textview.textColor=[UIColor whiteColor];
textview.text=@"";
textview.text=[textview.text stringByAppendingFormat:@"%s\n","iPhone Console" ];
textview.text=[textview.text stringByAppendingFormat:@"%s\n","revision 0.01" ];
textview.text=[textview.text stringByAppendingFormat:@"%s\n","" ];
s_view=textview;
s_viewcontroller=self;
//thread start
[self performSelectorInBackground:@selector(run:) withObject:@""];
// add view
[self.view addSubview:textview];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
}
-(void)viewDidUnload
{
[super viewDidUnload];
s_viewcontroller=NULL;
s_view=NULL;
}
@end
#endif
--------
//
// ViewController.h
// HelloUITextView
//
// Created by yomei on 2014/09/04.
// Copyright (c) 2014年 yomei. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
+ (void) print: (char*)str;
//@property (weak,nonatomic) IBOutlet UITextView* m_textview;
@end
0 件のコメント:
コメントを投稿