越来越喜欢oc这门语言,情绪高涨!!!
本期目录:
1.错误,提醒和解决
2.oc核心语法
3.个人总结
一:错误,提醒和解决
1.NSString中的length计算的是字数,不分英文中文
2.xcode文档的安装
1.直接放到Xcode中
/Applications/Xcode.app/Contents/Developer/Documentation/DocSets2.放到硬盘的某个路径
/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培训、期待与您交流! -------