您的位置:首页 > 移动开发 > Objective-C

【原创】用一个登陆的例子详细学习ObjectC基本语法

2013-08-15 02:12 405 查看
  最近打算好了,在开发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而是BOOL\int\NSString呢?返回什么?
//我们下次再详细讨论
- (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而是BOOL\int\NSString呢?返回什么?
//我们下次再详细讨论
- (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


  想要工程源码的可以留下邮箱,我看到后会发给需要的朋友。

  注:本代码没有加入内存管理代码,因为本文只是学习基本语法。

    有哪里不对的地方,欢迎拍砖!

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐