您的位置:首页 > 职场人生

黑马程序员6 oc核心语法

2014-11-22 16:17 417 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

越来越喜欢oc这门语言,情绪高涨!!!

本期目录:

1.错误,提醒和解决

2.oc核心语法

3.个人总结

一:错误,提醒和解决

1.NSString中的length计算的是字数,不分英文中文

2.xcode文档的安装

1.直接放到Xcode中

/Applications/Xcode.app/Contents/Developer/Documentation/DocSets

2.放到硬盘的某个路径

/Users/用户名/Library/Developer/Shared/Documentation/DocSets



3.多文件分类时,实现中要包括 #import <声明.h>,并且在main中不要再去写#import<声明.m>,只要加载.h头即可。(否则会出现duplicate错误)

4.多文件编译错误。!不能直接编译main.m 文件。理由:缺少其他 .o 文件。

错误:



正确:



二.oc核心语法

补充一个遗漏笔记:NSString

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
//char *_name;
NSString *_name;
}
@end

int main()
{
/*
// 最简单的创建字符串的方式
NSString *str = @"itcast";

char *name = "itcast";

NSLog(@"我在%@上课", str);
//NSLog(@"%s", name);
*/

int age = 15;
int no = 5;
NSString *name = @"哈哈jack";
// length方法算的是字数
int size = [name length];

NSLog(@"%d", size);

// 创建OC字符串的另一种方式
NSString *newStr = [NSString stringWithFormat:@"My age is %d and no is %d and name is %@", age, no, name];

NSLog(@"---- %ld", [newStr length]);

return 0;
}




在开始oc核心语法时,先介绍xcode新建一个项目

开始:File ->New -> Project 





新建类:

项目后:右键 -> NewFile:







开始oc核心语法

a.点语法

b.成员变量作用域

c.@property和@synthesize

d.构造方法

e.id类

a.点语法

点语法的实质:代码在编译器时展开。这样满足了其他习惯使用.语法的程序员很快的过度到oc的开发

//
//  main.m
//  04-点语法
//
//  Created by apple on 13-8-7.
//  Copyright (c) 2013年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"

int main(int argc, const char * argv[])
{
Person *p = [Person new];
// 点语法的本质还是方法调用
p.age = 10; // [p setAge:10];

int a = p.age; // [p age];
p.name = @"Jack";

NSString *s = p.name;
NSLog(@"%@", s);

return 0;
}


b.成员变量的作用域

(常用的作用域关键字)

@public : 在任何地方都能直接访问对象的成员变量

 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

 @protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)

 @package : 只要处在同一个框架中,就能直接访问对象的成员变量

@interface和@implementation中不能声明同名的成员变量

举例:







总结:可以看到Student不能直接访问_weight 成员变量(weight为private)。同时在@implementation中使用的变量全部是@private,外界是不能访问的。

c.@property和@synthesize(编译器功能)

通过前面的例子可以看到在使用oc封装的时候,会重复敲set和get代码,而这些代码如果可以像Eclipse 产生java get和set,就会很方便。java自己并不带生成set和get的具体方式,但是oc语言本身就有这个功能-----@property和@synthesize

@property 

比如:@property int _age,此时编译器会自动产生相应成员变量的set和get方法的声明。

@synthesize

比如:@synthesize age = _age;此时编译器会自动找到声明中的_age声明,产生_age的set和get方法实现。

使用技巧:

1.apple官方鼓励使用下划线来修饰成员变量的原因是@property会自动寻找_开头的成员变量

2.可以用一个@property修饰多个成员变量

3.甚至,我们可以用@property直接写没有声明的成员变量,编译器此时会自动以相应的set和ger方法来生成成员变量的声明。

4.如果我们自己写了set那么编译器会尊重我们的做法,他只会产生相应的get方法。

d.id类

万能指针(同时也是一个类)。NSObject *  = id

作用:

有时我们并不知道我们将会指向那个对象,那么就可以用id类来指向,他是一个万能的指针。

用法:

直接用id修饰:id o = [Pserson new];

举例:

//main
#import <Foundation/Foundation.h>
#import "Person.h"

void test(id d)
{

}

int main(int argc, const char * argv[])
{

@autoreleasepool {
Person *p = [Person new];
//[p fsdfdsfd];

NSObject *o = [Person new];

// id  == NSObject *
// 万能指针,能指向\操作任何OC对象
id d = [Person new];

[d setAge:10];

[d setObj:@"321423432"];

NSLog(@"%d", [d age]);
}
return 0;
}

//Person.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
@property int age;
@property id obj;
@end


//实现
#import "Person.h"

@implementation Person

@end


三:个人总结

慢慢进入oc的关键领域了,其中的好多思想是可以用java来思考的。但是,oc语法和其他语法还是很不相同。不过,他也有他自己的强大地方,比如有个id类,可以通过编译器自动展开成员变量的set和get方法。

黑马等我!

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息