这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容。在遇到暂时无法解决的问题时,我不是避而不谈,而是将问题直接写出来,希望以后得以解决,也希望各位高人看帖时哪能帮我回复解决哦。因为初次学习obj-c,开始肯定会写一些初级代码,犯一些低级错误,程序猿天赋不够,没办法啊!希望不断深入和总结吧,欢迎各位高人拍砖指点!好了言归正传,正如李纳斯所言:源代码拿来,直接上代码吧:
注意,obj-c中的#import和C中的#include类似,不同的是#import保证只加载一次h文件哦。@开头的字面值称为obj-c的关键字,为了和C代码冲突最小化,遂在开头加上字符@。
@interface Box:NSObject
{
int l;
int w;
}
-(void)print;
-(void)set_l:(int)x; //set box.length
-(void)set_w:(int)x; //set box.width
-(int) l;
-(int) w;
@end
@implementation Box
/*{
int l;
int w;
} 如果前面没有,则这里不能有实例变量声明吗?,否则会出错 error: inconsistent number of instance variables specified*/
-(void)print{
NSLog(@"l:%d,w:%d",l,w);
}
-(void)set_l:(int)x{
l=x;
}
-(void)set_w:(int)x{
w=x;
}
-(int)l{
return l;
}
-(int)w{
return w;
}
@end
int main(int argc, char *argv[]){
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
@autoreleasepool {
NSLog(@"hello class! :)");
Box *box0 = [Box new];
Box *box1 = [[Box alloc] init]; //new类方法的"分开步骤写法"
[box0 set_l:1];
[box0 set_w:2];
[box1 set_l:101];
[box1 set_w:102];
NSLog(@"box0: l is %d , w is %d",[box0 l],[box0 w]);
NSLog(@"box1:");
[box1 print];
}
NSLog(@"Hello World!");
[pool drain];
return 0;
}
[2014-06-30 第1次添加内容:定制对象的init方法]:
为了更好地初始化对象的变量,为什么不在对象init方法中就对其变量赋值呢?当然可以哦,以下是修改过的A类,在其添加了新的init:(int)方法,并且重载了原有的方法。在新的init:(int)方法中,我们首先要调用父类中的init方法,在其成功后(返回非nil值),才做自己初始化,另外注意init返回的都是id变量:
#import <Foundation/Foundation.h>
@interface A:NSObject
@property int i;
-(void)set_i:(int)i;
-(void)print;
-(id)init:(int)x;
@end
@implementation A{
int i;
}
@synthesize i;
-(void)set_i:(int)i_v{
i = i_v;
}
-(void)print{
NSLog(@"[class A][i:%d]:hello!",i);
}
-(id)init:(int)x{
self = [super init];
if(self){
[self set_i:x];
}
return self;
}
-(id)init{
return [self init:0];
}
@end
@interface B:A{
int j;
}
@property int j;
@end
@implementation B
@synthesize j;
-(void)print{
NSLog(@"[class B:A][i:%d,j:%d]hello!",self.i,j);
}
@end
int main(int argc,char *argv[])
{
@autoreleasepool{
NSLog(@"hello obj-c!");
A *a = [[A alloc] init:100];
B *b = [[B alloc] init:200];
//a.i = 101;
//b.i = 1001;
//[a set_i:99];
//[b set_i:199];
//b.j = 1002;
[a print];
[b print];
}
return 0;
}
注意,obj-c中的#import和C中的#include类似,不同的是#import保证只加载一次h文件哦。@开头的字面值称为obj-c的关键字,为了和C代码冲突最小化,遂在开头加上字符@。