OC基础day02
- 创建类对象
类声明
@interface Students : NSObject
{
//成员变量
int _age;
float _score;
NSString *_name;
}
@end
类的实现
@implementation Student
@end
// 创建对象
Student *xiaoMing = [Student new];
// Student new],在内存中做的事情
1. 在堆区在根据类的定义开辟空间
2. 初始化成员变量/属性的值
3. 返回这个空间的首地址
- 无参数的方法声明实现调用
定义一个学生类
- 无参数方法声明:
-
- (void)doHomework
-
- (返回值类型)方法名;
-
- 无参数的方法实现
- (void)doHomework { NSLog(@"抄作业....~"); } - (返回值类型)方法名 "注意写代码的位置在哪? { //实现 }
- 创建对象调用方法
- [对象名 方法名];
- 无参数方法声明:
代码如下
#import <Foundation/Foundation.h>
/*
Student
属性:名字,年龄,学号,成绩
方法:做作业,听音乐
*/
@interface Student : NSObject
{
//成员变量
NSString * _name;
int _age;
int _sno;
float _score;
}
//方法的声明
//- (返回值类型)方法名;
/**
* 做作业方法的声明
*/
- (void)doHomework;
/**
* 听音乐方法的声明
*/
- (void)tingYinYue;
@end
@implementation Student
//方法的实现
/**
* 做作业方法的实现
*/
- (void)doHomework
{
//实现
NSLog(@"抄作业....");
}
/**
* 听音乐方法的实现
*/
- (void)tingYinYue
{
NSLog(@"听音乐 啊啊啊啊啊~~");
}
@end
int main(int argc, const char * argv[]) {
// 1.定义一个学生类(有方法)
//
// 2.创建对象调用方法
//类中的方法 不能直接调用
Student * zhangsanfeng = [Student new];//1.2.3
//格式 [对象名 方法名];
[zhangsanfeng tingYinYue];
[zhangsanfeng doHomework];
return 0;
}
- 带一个参数的方法的声明实现调用
- 有参数的方法声明
-
- (返回值类型)方法名:(参数类型)参数名;
-
- (void)eat:(NSString *)foodName;
-
- 有参数的方法声明
- 调用带一个参数的方法:
- 方法 不能直接调用
- [对象名 方法名:实际参数];
- [wangCai dat:@”水”];
- 有参数的方法声明
- 代码如下
#import <Foundation/Foundation.h>
@interface Dog : NSObject
{
//成员变量
int _age;
NSString * _color;
NSString * _kind;
}
//吃东西的声明
- (void)eat:(NSString *)foodName;
//喝东西的声明
- (void)drink:(NSString *)drinkName;
@end
@implementation Dog
//吃东西实现
- (void)eat:(NSString *)foodName
{
//吃东西的实现
NSLog(@"主人 %@真好吃",foodName);
}
//喝东西的实现
- (void)drink:(NSString *)drinkName
{
NSLog(@"主人 %@真好喝",drinkName);
}
@end
int main(int argc, const char * argv[]) {
//方法不能直接调用,要有对象
Dog * wangcai = [Dog new];
//调用方法
[wangcai eat:@"shi"];
[wangcai drink:@"水"];
return 0;
}
- **带多个参数的方法的声明和实现
- 定义狗类 要求有两个参数的额方法
-
- (返回值类型)方法名字:(参数类型)参数名1 :(参数类型)参数名2 :()….;
- 方法调用
- [对象名 方法名:实参1 :实参2];
- 代码如下
/*
1.定义狗类,要求有两个参数的方法,又吃又喝,旺财会算术(只会算2个数的加法)
2.方法的调用
*/
#import <Foundation/Foundation.h>
//
@interface Dog : NSObject
{
//成员变量
int _age;
NSString * _color;
NSString * _kind;
}
//又吃又喝 方法的声明
- (void)eatAndDrink:(NSString *)foodName :(NSString *)drinkName;
//求两个数的和的方法
- (int)sum:(int)num1 :(int)num2;
@end
@implementation Dog
//又吃又喝 方法的实现
- (void)eatAndDrink:(NSString *)foodName :(NSString *)drinkName
{
NSLog(@"旺财 一边吃着%@,一边喝着%@,还吧唧着嘴",foodName,drinkName);
}
- (int)sum:(int)num1 :(int)num2
{
int sum = num1 + num2;
return sum;
}
@end
int main(int argc, const char * argv[]) {
Dog * wangcai = [Dog new];
//调用2个参数的方法
[wangcai eatAndDrink:@"shi" :@"niao"];
int rel = [wangcai sum:10 :20];
NSLog(@"rel = %d",rel);
return 0;
}
- 方法的命名规范
建议格式:
-
- (返回值类型)xxxWithxxx:(参数类型)xxx :andXxx(参数类型)参数名;
-
- (void)readingWithBookName:(NSString )bookName andMusicName:(NSString )musicName;
- [xiaohong readingWithBookName:@”金瓶梅” andMusicName:@”葫芦娃”];
- 注意命名规范最主要的是能看懂就好 最好是一句话
-
同一个类的多个对象之间毫无关系
- 同一个类可有 无数个对象 对象之间是毫无关系的
- 每一个对象 都有一份自己的成员变量 不收娶她对象的影响
- 类 就像一张纸,对象通过图纸制造出来的东西
在方法的实现中直接访问属性
* 以_开头的方法叫做 对象方法
* 顾名思义 只有对象可以调用的方法
* 在”_”方法内部, 可以直接访问 属性, 那么访问的就是调用这个方法的对象的属性
“`
#import <Foundation/Foundation.h>
@interface Pig : NSObject
{
@public
NSString * _name;
int _IQ;//智商
float _weight;//体重
}
//叫:在这个方法中 喊出自己的名字 智商 和体重
- (void)bark;
@end
@implementation Pig
- (void)bark
{
//在对象方法 的实现中可以直接访问属性
//谁调用 那么_name 就是谁的name
NSLog(@"我叫 %@,我的体重高达 %.2lf,我的智商低至%d",
_name,
_weight,
_IQ
);
}
@end
int main(int argc, const char * argv[]) {
//创建一个