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

 

  最近打算好了,在开发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

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

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

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

  

posted @ 2013-08-15 02:12  盗草人  阅读(768)  评论(1编辑  收藏  举报