开始学习OC了
1、OC语法简介
C语言是一门面向过程的语言,OC是在C语言的基础上,增加了一层最小的面向对象语法,为什么说是最小的面向对象语法呢?因为OC把一些比较复杂的面向对象语法都去掉了,剩下的都是面向对象的精华,因此OC是一门面向对象的语言,而且会比C++简单很多。因为OC是基于C语言的,所以完全兼容C语言,也就是说我们在开发iOS程序过程中,可以在OC代码中混入C语言代码,甚至是C++代码。
在Java中,为了防止两个类名相同的类冲突,你可以将这2个类放在不同的包里面。OC中并没有”包”的概念,也就是没有命名空间机制,取而代之的是开发人员给类名加上前缀,使用前缀可以有效的防止类名冲突。比如NSString(OC中的字符串类)、NSArray(OC的数组类),它们的前缀都是NS
前面说到,OC代码中是可以混入C语言、C++代码的,而C语言和C++作为一门编程语言,都有自己的关键字。为了防止跟C语言、C++关键字冲突,OC的关键字都以@开头。
新建一个工程:
//import是include的改进,可以避免重复包含
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
//自动释放池
@autoreleasepool {
//NSlog参数格式化字符是NSString的对象
//NSlog的占位符%@用以输出对象,其他的和C一致
NSLog(@"Hello, World!");
}
return 0;
}
2、面向对象(OOP)
面向对象无外乎就是那几个概念的集合
类、对象、实例、方法、消息
新建一个类
新建一个工程,系统会自动创建main.m文件的,这时候,我们右键项目,选择New File..
再选择OS X中的Source,在选择Cocoa Class,点击下一步设置类名,确定即可类在接口@interface中定义
@interface Car : NSObject
-(void)run;
@end
- 类在接口中实现
@implementation Car
- (void) run
{
NSLog(@"car is runing");
}
@end
- 成员变量
@interface Car : NSObject
{
//@private 私有成员,只有当前类可以访问;
//@protected 受保护成员,只有当前类或子类可以访问(如果没有添加任何修饰则默认为@protected);
//@public 公共成员,所有类均可访问;
int _wheels; // 轮子个数
int _speed; //时速
//注意:只能定义不能赋值,因为这里只是在做声明操作,不能赋值的
}
//定义方法
//-:实例方法,+:类方法
//格式:方法说明 (返回类型) 方法名 : (参数类型)参数名称
-(void)run;
@end
3、实例
- OC中实例化一个对象的方式是:
Person *person1 = [[Person alloc] init];
4、方法
同时,OC中的方法调用方式:
对象方法:[对象变量 方法名 参数] 类方法:[类名 方法名 参数]
5、便利初始化函数和便利构造器
- 为了减轻赋初值的麻烦可以重写写初始化函数以及构造器
//@interface
@interface Student : NSObject
{
@public
NSString *_name;
int _age;
NSString *_hobby;
NSString *_addr;
}
-(void)sayHi;
+(Student *)studentWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby;//+类方法
@end
//@implementation
#import "Student.h"
@implementation Student
-(Student *)initWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby//便利初始化函数
{
self = [super init];
if (self) {
_name=newName;
_addr=newAddr;
_age=newAge;
_hobby=newHobby;
}
return self;
}
+(Student *)studentWithName:(NSString *)newName andAddr:(NSString *)newAddr andAge:(int)newAge andHobby:(NSString *)newHobby//便利构造器(利用了初始化函数)
{
Student *stu = [[Student alloc]initWithName:newName andAddr:newAddr andAge:newAge andHobby:newHobby];
return stu;
}
-(void)sayHi
{
NSLog(@"my name is %@ live in %@ my age is %d i like %@",_name,_addr,_age,_hobby);
//%@用以输出字符串对象
}
@end
//main.h
#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Student *stu=[Student studentWithName:@"zhangsan" andAddr:@"nanjin" andAge:19 andHobby:@"football"];
[stu sayHi];
}
return 0;
}
//然后今天一直在练习便利初始化函数和构造器,所以其他的练习我就不放上来了
-
-
-15.7.30
-15.8.11