pragma mark 第一个OC类方法
pragma mark 概念
// 注意: 如果声明的是对象方法 那么就必须实现对象方法
// 如果声明的是类方法 那么必须实现类方法
/*
类方法和对象方法的区别
0. 对象方法以 - 开头
类方法 以 + 开头
1. 对象方法 必须 用对象调用
类方法 必须 用类调用
2. 对象方法中 可以 直接访问 属性(成员变量)
类方法中 不可以直接访问属性(成员变量)
3.类方法的优点, 调用类方法的效率 会比 对象方法高
4. 类方法和对象方法是可以相互调用
4.1对象方法中 可以直接调用类方法
4.2可以在类方法中 间接 调用对象方法 (注:不建议这样使用)
4.3类方法中 可以直接调用其它类方法
4.4 对象方法中 可以直接调用对象方法
类方法的应用场景
如果方法中 没有使用 属性(成员变量), 那么能用类方法就用 类方法
字符串 查找
文件 操作
数据库 操作
*/
pragma mark 代码
#import <Foundation/Foundation.h>
/*
事物名称:iPhone
属性: 颜色, 型号, CPU, 尺寸 == 成员变量
行为: 打电话, 发短信, 上网, 获取本机信息 == 成员方法
*/
// 1.编写类的声明
@interface IPhone : NSObject
{
@public
float _model; // 型号
int _cpu; // CPU
double _size; // 尺寸
int _color; // 颜色
}
#warning 方法声明
-(void)about;
- (char *)loadMessage;
- (int)singnal:(int)number;
- (int)sendMessage:(int)number : (char *)content;
- (int)sendMessageWithNumber:(int)number andContent: (char *)content;
// 计算器
// 如果您不想每次使用方法 都 需要创建对象 开辟存储空间
// 并且如果该 方法没有使用到 属性(成员变量), 那么你可以把这个方法定义为类方法
// 对象方法用对象调用 类方法用类调用
//- (int)sumWithVlaue1:(int)value1 andValue2:(int)value2;
// 如何定义类方法,类方法的写法和对象方法一模一样,除了前面的 - 号 不同以外 \
只需要将对象方法的 -号 换成 + ,那么就定义了一个类方法
+ (int)sumWithVlaue1:(int)value1 andValue2:(int)value2;
+ (void)demo;
@end
@implementation IPhone
#warning 方法的实现
// 行为的实现
-(void)about
{
// NSLog(@"sum = %i\n",[IPhone sumWithVlaue1:20 andValue2:20]);
NSLog(@"打印本机信息 %f",_model,_cpu,_size,_color);
// IPhone *p = [IPhone new];
// NSLog(@"%s",[p loadMessage]);
#warning 对象方法 调用对象方法
NSLog(@"%s",[self loadMessage]);
}
- (char *)loadMessage
{
return "hello";
}
int singnal(int number)
{
return 1;
}
- (int)singnal:(int)number
{
NSLog(@"打电话给%i",number);
return 22;
}
- (int)sendMessage:(int)number : (char *)content
{
NSLog(@"发短信 %i,内容 = %s",number,content);
return 33;
}
#warning 类方法 对象方法
//- (int)sumWithVlaue1:(int)value1 andValue2:(int)value2
//{
// return value1 + value2;
//}
+ (int)sumWithVlaue1:(int)value1 andValue2:(int)value2
{
// 类方法中 不可以直接访问属性(成员变量)
// NSLog(@"打印本机信息 %f",_model,_cpu,_size,_color);
IPhone *p = [IPhone new];
[p singnal:123456789]; // 注意: 在企业开发中,不建议这样使用
return value1 + value2;
}
+ (void)demo
{
NSLog(@"%i",[IPhone sumWithVlaue1:10 andValue2:10]);
NSLog(@"lyh");
}
@end
int main(int argc, const char * argv[])
{
/*
// 1.通过类创建对象
IPhone *p = [IPhone new];
// 2. 修改对象的属性
p->_size = 5.5; //is protected(是 受保护的)
p-> _color = 0;
p->_model = 4;
p->_cpu = 22;
// 3.如果给对象发消息(如果调用对象的方法)
[p about];
char *content = [p loadMessage];
NSLog(@"conteent = %s",content);
[p singnal:1234];
[p sendMessage:1332918282 :"luck"];
#warning 不能使用 类 调用 对象方法
// int res = [p sumWithVlaue1:10 andValue2:20];
int res = [IPhone sumWithVlaue1:10 andValue2:230];
NSLog(@"res = %i",res);
*/
#warning 不能使用 对象 调用 类方法
// [IPhone singnal:1234]; // 找不到类方法
IPhone *p = [IPhone new];
// int res = [p sumWithVlaue1:10 andValue2:230]; // 不能使用对象 调用类方法
[p about];
// [IPhone demo];
return 0;
}
void test()
{
// 1.创建一个对象(消耗性能)[解决方法 使用类方法]
/*
开辟一块存储空间
*/
// 2.利用对象调用加法运算方法
// IPhone *p1 = [IPhone new];
// int res = [p1 sumWithVlaue1:10 andValue2:10];
int res = [IPhone sumWithVlaue1:200 andValue2:200];
NSLog(@"res = %i",res);
}