黑马程序员_对象的简单分析_对象与函数参数_常见错误



黑马程序员_对象的简单分析_对象与函数参数_常见错误


一、面向对象封装的好处


1.更加接近人类的思考方式。
2.只需要关注对象,不需要关注步骤。

二、类的声明和实现


1. @interface 和 @implementation的分工
  * @interface就好像暴露在外面的时钟表面。
  * @implementation就好像隐藏在时钟内部的构造实现。

三、常见错误


1.只有类的声明,没有类的实现。
2.漏了@end
3. @interface 和 @implementation嵌套
4.两个类的声明嵌套
5.成员变量没有写在括号里面
6.方法的声明写在了大括号里面

四、语法细节


1.成员变量不能在{}中进行初始化,不能被直接拿出去访问
2.方法不能当作函数一样调用
3.成员变量、方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)
4.类的实现可用写在main函数后面,主要在声明后面就行了。

五、OC方法和函数的区别


1.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间;
  也就是说OC方法不能独立于类存在。
2.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有。


六、对象但简单分析

1.每个对象都占据一块存储空间。
2.类在内存中只占有一块存储空间。
3.创建类时在内存中创建一块存储空间。
4.在使用类创建对象之前,会将类加载进内存(只会加载一次)。
5.每个对象内部默认都有一个isa指针,这个指针指向对象所对应的类。
6.类中的方法列表是所有对象一起使用的。
7.成员变量每个对象都有一份,但是方法列表是公用的。


七、对象与参数


对象成员变量作为函数参数。
指向对象的指针作为函数参数
修改指向对象的成员
修改指针的指向


对象与函数参数代码示例:

#import <Foundation/Foundation.h>

@interface Car : NSObject
{	// 成员变量
	@public
	int wheels;
	int speed;
}

- (void)run;

@end

@implementation Car

- (void)run
{
	NSLog (@"%d个轮子,速度为%dkm/h的车子跑起来了。",
		wheels, speed);
}

@end

void test(int w, int s)
{
	w = 20;
	s = 200;
}

void test1(Car *newC)	// 传递Car类对象的地址
{
	newC->wheels = 5;
}

void test2(Car *newC)
{
	Car *c2 = [Car new];
	c2->wheels = 5;
	c2->speed = 300;

	newC = c2;
	newC->wheels = 6;
}

int main()
{
	Car *c = [Car new];
	c->wheels = 4;
	c->speed = 250;

	test(c->wheels, c->speed);	// 值传递
	// test1(c);
	test2(c);

	[c run];

	return 0;
}


常见错误代码分析:

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
	// 成员变量\实例变量

	int wheels;

	// int wheels = 4; 不允许直接初始化
	// int wheels; 重复错误
	// - (void)run;	方法的声明写在大括号{}外面
	// static int wheels;	不能随便将成员变量当作C语言中的变量来使用
}

- (void)run;

/*
  * 方法的实现必须写在@implementation里面
- (void)fly
{

}
 */

/*
  * @interface 和 @implementation嵌套错误
@implementation Car
- (void) run
{
	NSLog (@"%d个轮子的车子跑起来了。", wheels);
}
@end

 */


int main()
{
	// wheels = 10; 实例变量不可直接赋值

	Car *c = [Car new];

	return 0;
}

// 类的实现可以放在main()函数的后面,但是声明必须放在前面。
// 就像函数一样,函数的声明放在main的前面,函数的定义可以放在前面也可以放在后面。
@implementation Car

// - (void)fly;	方法声明必须写在@interface里面

// - static (void)run 没有内部方法这个概念
- (void) run
{
	NSLog (@"%d个轮子的车子跑起来了。", wheels);
}

@end

static void test()
{}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值