黑马程序员6 oc核心语法

时间:2023-02-18 20:48:07
------ 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


黑马程序员6 oc核心语法


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

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

错误:

黑马程序员6 oc核心语法

正确:

黑马程序员6 oc核心语法


二.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;
}

黑马程序员6 oc核心语法



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

开始:File ->New -> Project 

黑马程序员6 oc核心语法


黑马程序员6 oc核心语法

新建类:

项目后:右键 -> NewFile:

黑马程序员6 oc核心语法


黑马程序员6 oc核心语法

黑马程序员6 oc核心语法

开始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中不能声明同名的成员变量


举例:

黑马程序员6 oc核心语法


黑马程序员6 oc核心语法

黑马程序员6 oc核心语法

总结:可以看到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培训、期待与您交流! -------