A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天鹰的空 中级黑马   /  2015-8-16 12:33  /  452 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


//无参数方法声明
-(返回值)方法名;

//有参数方法声明
-(返回值)方法名1:(参数类型) 参数名;

-(返回值)方法名1:(参数类型) 参数名 and:(参数类型2) 参数名2;

举例:
-(void)info:(NSString *name) andAge:(int)age;

注意:冒号是方法名的一部分

//实例变量书写规范
@interface Person : NSObject
{
    //类的属性
    int _age;
    NSString *_name;
   
}

@end

//-----------------------对象存储细节
1. 当创建一个对象的时候:Person *p1 = [Person new] 做了三件事情:
    1.1,申请堆内存空间;
    1.2,给实例变量初始化
    1.3,返回所申请空间的首地址;

2. 实例变量保存在堆区

3. 对象方法保存在代码区

4. 一个类可以创建多个对象;

//---------------#pragma mark 指令

功能:对代码分组,方便代码查找和导航

使用格式: #pragma mark -

#waring  等待处理的功能,或者是未完成的功能

//-----------------------函数和对象方法的区别
-(void)run;
(1)对象方法的实现在@implementation...@end中

   对象方法的声明只能写在 @interface...@end中间

(2)对象方法都以-号开头

(3)对象方法只能由对象来调用

(4)函数属于整个文件,可以写在文件中的任何位置,包括@implementation...@end中,但写在 @interface...@end会无法识别,函数的声明可以在main函数内部也可以在main函数外部。

(5)对象方法归对象所有

函数: void run(){
}
(1)所有的函数都是平行的
(2)函数不存在隶属关系
(3)使用的时候可以直接调用
(4)不可以访问对象中的成员变量





//------------------常见错误汇总
1)@interface @end和@implementation @end不能嵌套包含

2)只有类的声明没有类的实现
只有@interface没有@implementation时,程序编译能够通过,但是执行报错

3)漏写@end

4)两个类的对象声明顺序(可以把顺序打乱)

5)成员变量没有写在{}里    错误的

6)方法的声明写在了{}里面  错误的

7)在声明时不能对类的成员变量进行初始化,请注意成员变量不能脱离对象而独立存在

8)方法无法像函数那样的调用

9)成员变量和方法不能用static等关键字修饰,不要和c语言混淆

10)类的实现可以写在main函数后面,在使用之前只要有声明就可以

#warning 列举这些常见错误,是为了告诉大家要往正确的方向去学习去编写代码.把自己编写代码的习惯更正过来


//------------------对象和方法之间的关系
-(返回值)方法名1:(参数类型) 参数名;

//(1),对象作为方法的参数
-(void) displayPerson:(Person *)person{
    NSLog("姓名:%@",person->name);
}

//(2),对象作为方法的返回值
-(Person *)changePerson:(Person *)person{
    person->name = @"唐僧";
    return person;
}

//关联关系(之后还会着重讲)   人拥有狗这个成员变量
@interface Person : NSObject
{
@public
    Dog *_dog;  //null      关联关系    Person对象里面拥有了一个Dog对象
}

......

Person *p = [Person new];
//给p一个dog
p->_dog = d1;  //人拥有d1这只狗


对象作为方法参数的连续传递


/*  练习方法
1----看到题目  写代码  允许写伪代码作为提示
2----看着题目  写伪代码  写完伪代码  可以尝试敲代码
3----copy题目  copy伪代码  尝试去写代码
4----打开现成代码   看懂这个代码  对着敲  至少也得敲2遍
*/


//------结构体作为类的实例变量。给结构体赋值的三种方法:
typedef struct {
   
    //年
    int year;
    //月
    int month;
    //日
    int day;
   
}MyDate;

//第一种:直接赋值,并强转;
stu->_birthday =(MyDate){1983,12,12};//直接赋值,并强转;

//第二种:先定义,然后在赋值
MyDate d1 = {1981,11,11};  //定义结构体变量的同时进行初始化
stu->_birthday = d1;

//第三种方法,逐个赋值
stu->_birthday.year = 2014;
stu->_birthday.month = 12;
stu->_birthday.day = 11;

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马