IOS基础之OC:OC对象方法
一个类的三要素:类名、属性、行为(方法)
代码里面写的方法,其实就是对某一个类进行行为的描述
方法的定义:
-(void)方法名;
方法的实现:
-(void)方法名{
方法体;
}
方法它本质上就是函数,方法很多的用法跟函数一样
函数分为无参无返回值的函数、有参无返回值的函数、有参有返回值的函数、无参有返回值的函数,方法也分这几种
1.无参无返回值的函数:
void 函数名();
方法的: -(void)方法名;
使用方法:
函数用法:
函数名();
方法用法:
[对象名 方法名];
注意:1.方法的声明只能写在@interface和@end之间(不包括大括号里面)
2.方法的实现只能写在@implementation和@end之间
-----------------实例代码-----------------
#import <Foundation/Foundation.h>
-----方法的声明-----
@interface Person : NSObject{
@public //不加public外面调用不了
NSString *_name;
int _age;
}
-(void)run;
@end
-----方法的实现-----
@implementation Person
-(void)run{
NSLog(@“你好,小明");
}
@end
-----主函数-----
int main(int argc, const char * argv[]) {
@autoreleasepool {
//调用方法之前一定要new一个对象
Person *p = [Person new];
[p run];//对象名 方法名
}
return 0;
}
2一个参数的情况:
定义的语法:
-(void)方法名:(参数类型)参数名;
实现的语法:
-(void)方法名:(参数类型)参数名{
方法体;
}
调用的语法:
[对象名 方法名:实参值];
注意:如果有参数的话,冒号也属于方法名
两个参数的情况:
定义的语法:
-(void)方法名:(参数类型)参数名 :(参数类型)参数名2;
注意:1、有空格!
2、为了增强方法的可读性,一般在后面的参数里面,还会写一些方法的名(必须加)
例: -(void)方法名1:(参数类型)参数名 方法名2:(参数类型)参数名2;
实现的语法:
-(void)方法名:(参数类型)参数名 :(参数类型)参数名2{
方法体;
}
调用:
[对象名 方法:参数1 :参数2];
N个参数的情况:
-(void)方法名:(参数类型)参数名1 方法名2:(参数类型)参数名2 方法名3:(参数类型)参数名3 方法名n:(参数类型)参数名n;
注意:方法名是包含冒号的!
-----------------实例代码-----------------
#import <Foundation/Foundation.h>
-----方法的声明-----
@interface Person : NSObject{
NSString *_name;
int age;
}
// 方法名:watchMovie:andFood:
-(void)watchMovie:(NSString *)movie andFood:(NSString *)food;
//方法名是eat: 形参名是:food
-(void)eat:(NSString *)food;
@end
-----方法的实现-----
@implementation Person
//方法的实现
-(void)watchMovie:(NSString *)movie andFood:(NSString *)food{
NSLog(@"看《%@》,吃着%@",movie,food);
}
-(void)eat:(NSString *)food{
NSLog(@"吃%@",food);
}
@end
-----主函数-----
int main(int argc, const char * argv[]) {
@autoreleasepool {
//new一个对象
Person *p = [Person new];
// NSString *food = @"汉堡包";
//
// [p eat:food]; //传递变量
[p eat:@"汉堡包"]; //可以直接给值
[p watchMovie:@"恐怖片" andFood:@"炸鸡啤酒" ];
}
return 0;
}
3有返回值方法的定义语法:
-(返回值类型)方法名:参数列表;
例: -(int)sayAge;
实现:
-(返回值类型)方法名:参数列表{
方法体;
return 值;
}
-(int)sayAge{
return 16;
}
方法的返回值跟函数一样,你可以接收,也可以不接收,反正它都会执行
-----------------实例代码-----------------
#import <Foundation/Foundation.h>
-----方法的声明-----
@interface Person : NSObject{
@public
NSString *_name;
int _age;
}
-(int)sayAge;
@end
-----方法的实现-----
@implementation Person
-(int)sayAge{
return 16;
}
@end
-----主函数-----
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [Person new];//先要有对象
//再通过对象来调用方法
// int age = [p sayAge];
//
// NSLog(@"%d",age);
NSLog(@"%d",[p sayAge]);
}
return 0;
}