最近打算好了,在开发Android项目之余,把IOS开发学习一下。有兴趣的同学可以和我一起学习。
下面我用一个登陆的例子记录一下ObjectC的语法,我不是一个喜欢打字的人,我的讲解都在注释里面了。
不过,我保证,每一行代码,每一行注释都是有用的。希望能够帮助新入门的朋友。
下面是我的工程的目录结构:
接下来我会按上面的顺序贴上源码:
main.m
// // main.m // t // // Created by JiaYing.Cheng on 13-8-14. // Copyright (c) 2013年 DaoCaoWu. All rights reserved. // #import <Foundation/Foundation.h> #import "LoginService.h" int main(int argc, const char * argv[]) { @autoreleasepool { LoginService *loginService = [[LoginService alloc] init]; UserBean *user = [[UserBean alloc] init]; // id 是一个指针类型,可以指向任何类型的对象 id obj = (UserBean *)user; [loginService setUserName:@"adao12" setPassword:@"000000"]; //貌似调用无参方法不用加"[]"哦 if (loginService.login) { NSLog(@"登陆成功"); } else { NSLog(@"登陆失败"); } // [user setUserName:@"adao12" setPassword:@"000000"]; [obj setUserName:@"adao12" setPassword:@"000000"]; // [user setUserName:NULL setPassword:NULL];//C式的空值NULL也可以用 // [user setUserName:nil setPassword:nil];//赋空值采用nil,但不像Java,ObjectC可以对值为nil的对象传递讯息 //总之,nil和NULL是一样的,我们使用nil而不用NULL是因为我们用来表示对象的指针为空 // if ([loginService login:user]) { if ([loginService login:obj]) { NSLog(@"登陆成功"); } else { NSLog(@"登陆失败"); } if ([loginService login:@"adao12":@"000000"] == YES) { NSLog(@"登陆成功"); } else { NSLog(@"登陆失败"); } } return 0; }
LoginService.h
// // LoginService.h // t // // Created by JiaYing.Cheng on 13-8-14. // Copyright (c) 2013年 DaoCaoWu. All rights reserved. // //Object C 的文件导入用#import #import <Foundation/Foundation.h> #import "UserBean.h" //头文件声明用@interface 后面接的是类名 //inheritance(继承) 用class : ParentClass 方式表示,这里是继承NSObject @interface LoginService : NSObject { //接口变量是不能用静态的方式声明的,要在前面加上*,声明为指针类型, //比如现在的NSString类型就要加,其他类型还没有测试,大家有兴趣的可以测试一下哈~ //示范一下错误的声明 //NSString userName; //NSString password; //下面才是正确的 @private NSString *userName; NSString *password; //在@interface class : parentClass{ ... }花括号里面的是成员变量(instance variable) } /** *登陆业务 * instance methods 成员方法 * - 表示实例类型,也就是说,只有类的实例才能调用这个方法,用instance类型表示, * 如果是 + 则是class类型,直接调用,相当于C++和Java里面的静态(static)方法 * (void) 是方法的返回类型,注意要加上括号,下次我们将探讨一下Object c的基本数据类型有哪些,有C有什么不一样 * login 是方法名 * 方法名后面直接加上了分号";",有点怪怪是不是?C++和Java里面是有括号的:protected void login(); * 为什么是protected呢?因为在没有设定访问权限(public,protected,private)时,预设访问权限为protected * 这些都是规则而已,习惯就好了 */ - (BOOL)login; //对同时声明多个方法的表示方式[-/+ (returnType)method1Name:(param1Type)param1:(param2Type)param2 method2Name:(param1Type)param1 ...] //这种声明方式,调用的时候可以单独调用一个方法,也可以同时调用多个方法,但是这里有个有趣的问题可以探讨一下,如果返回类型不是void而是BOOLintNSString呢?返回什么? //我们下次再详细讨论 - (void)setUserName:(NSString *)name setPassword:(NSString *)psw; - (BOOL)login:(UserBean *)user; - (BOOL)login:(NSString *)name :(NSString*)psw; /** *哈,我们现在只是写登陆,注册就不写啦, * 大家有没有发现C++,Java里面的多行注释还可以用。。 *- (void) register; */ //这时是定义完一个类后的标识@end @end
LoginService.m
// // LoginService.m // t // // Created by JiaYing.Cheng on 13-8-14. // Copyright (c) 2013年 DaoCaoWu. All rights reserved. // #import "LoginService.h" //以@implementation className开始 @implementation LoginService //LoginService的无参构造器 - (LoginService *)init { //这里的超类的init方法的名称是不能改变的 self = [super init];//这句不能漏了 if (self) {//这句不能漏了 /*do what you want to do in here*/ userName = @"adao11"; password = @"000000"; } return self;//这句不能漏了 } //LoginService的有参构造器 - (LoginService *) init:(NSString *)name setPassword:(NSString *)psw { self = [super init];//这句不能漏了 if (self) {//这句不能漏了 /*do what you want to do in here*/ //调用自身方法 [self setUserName:name setPassword:psw]; } return self;//这句不能漏了 } //无参登陆,在设置用户名和密码后调用 - (BOOL)login { //判断语句和C++、Java一样,逻辑运算符也是一样的哦 //方法调用语句要用"[ ... ]"括起来,表示方式是[对象实例 方法名:参数1:参数2 ...] if ([userName isEqual: @"adao12"] && [password isEqual:@"000000"]) { return YES; } //布尔类型(BOOL、Boolean)的值是YES和NO,当然,如果你不习惯,也可以用TRUE和FALSE return NO; } //设置用户名和密码 - (void)setUserName:(NSString *)name setPassword:(NSString *)psw { //变量赋值,=号赋值 userName = name; password = psw; } //传入实体对象进行登陆 -(BOOL)login:(UserBean *)user { if ([user.getUserName isEqual:@"adao12"] && [user.getPassword isEqual:@"000000"]) { return YES; } return NO; } //传入用户名和密码进行登陆 -(BOOL)login:(NSString *)name :(NSString *)psw { if ([name isEqual: @"adao12"] && [psw isEqual:@"000000"]) { return YES; } return NO; } //以@end结束 @end
UserBean.h
// // UserBean.h // t // // Created by JiaYing.Cheng on 13-8-14. // Copyright (c) 2013年 DaoCaoWu. All rights reserved. // #import <Foundation/Foundation.h> @interface UserBean:NSObject { NSString *userName; NSString *password; } //对同时声明多个方法的表示方式[-/+ (returnType) method1Name : (param1Type)param1 : (param2Type)param2 method2Name : (param1Type)param1 ...] //这种声明方式,调用的时候可以单独调用一个方法,也可以同时调用多个方法,但是这里有个有趣的问题可以探讨一下,如果返回类型不是void而是BOOLintNSString呢?返回什么? //我们下次再详细讨论 - (void)setUserName:(NSString *)name setPassword:(NSString *)password; //- (void)setUserName:(NSString *)userName; - (NSString *)getUserName; //- (void)setPassword:(NSString *)password; - (NSString *)getPassword; @end
UserBean.m
// // UserBean.m // t // // Created by JiaYing.Cheng on 13-8-14. // Copyright (c) 2013年 DaoCaoWu. All rights reserved. // #import "UserBean.h" @implementation UserBean - (void)setUserName:(NSString *)name setPassword:(NSString *)psw { userName = name; password = psw; } //-(void)setUserName:(NSString *)name //{ // userName = name; //} - (NSString *)getUserName { return userName; } //-(void)setPassword:(NSString *)psw //{ // password = psw; //} -(NSString *)getPassword { return password; } @end
想要工程源码的可以留下邮箱,我看到后会发给需要的朋友。
注:本代码没有加入内存管理代码,因为本文只是学习基本语法。
有哪里不对的地方,欢迎拍砖!