//
// MyTest.h
// eliteEnglishIPhone
//
// Created by jelly on 2020/2/23.
// Copyright © 2020 jelly. All rights reserved.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface MyTest : NSObject
//--------------- area1 变量声明区域 ---------------
//一般也不这样写,麻烦
//对外开放的实例变量,直接用 area2替代
//私有实例变量 则在 @implementation 上面(静态变量) 或 下面(非静态变量) 来声明
{
@private
NSString *pri;
@public
NSString *pub;
}
//--------------- area2 变量声明区域 ---------------
//注意,objective-c 中的属性 实质就是方法,是方便不再手写 getter 和 setter 方法
//和 java 里的属性不是一个意思,在 java 里,属性=成员变量=实例变量
//对内可用,同时对外开放,这样声明就行了,xcode 会自动帮我们做3件事:
//同时在 xx.m 中就可以省略 @synthesize 和 @dynamic,这是 xcode 编译器增强后,给开发者带来的的便利性
//1,变量声明
//2,变量对应的 getter 和 setter 方法声明
//3,变量对应的 getter 和 setter 方法实现
@property NSString *name;
@property int age;
//--------------- area3 方法声明区域 ---------------
//声明实例方法,必须先创建类的实例,再调用,实例.实例方法()
-(void)instanceMethod;
//声明类方法,不用创建实例,可以直接用 类名.类方法() 调用
+(void)classMethod;
@end
NS_ASSUME_NONNULL_END
//
// MyTest.m
// eliteEnglishIPhone
//
// Created by jelly on 2020/2/23.
// Copyright © 2020 jelly. All rights reserved.
//
#import "MyTest.h"
//--------------- area1 static 实例变量声明区域 ---------------
//凡是在 @implementation 外声明的变量,都是静态变量,加不加 static 一样
//下面的 +(void)test() 证明了我们所说的
//像face2,加了 static,作用域只限制在本类中,最常用的是用这种方法实现 单例模式
//但 face1,没加 static,作用域就是全局的,全局不能有重名,xcode 会编译报错,不要问为什么,死记
NSString *face1;
static NSString *face2;
@implementation MyTest
//--------------- area1 实例变量声明区域 ---------------
{
//在这里声明的都是,实例变量=成员变量
NSString *book;
NSString *money;
}
//在这里声明的都是,实例变量=成员变量
NSString *toy;
//--------------- area2 方法声明区域(实例方法或类方法) ---------------
//实例方法
-(void)instanceMethod{
}
//类方法
+(void)classMethod{
}
+(void)test{
face1 = @"face1";
face2 = @"face2";
}
@end