“Cricum.h” (圆的周长面积及是否相交)
#import <Foundation/Foundation.h>
@interface Circum : NSObject
@property double r;
@property CGPoint o;
@property (readonly) double s; //把面积作为一个属性(只读代表只能访问_s)
@property (readonly) double c; //把周长作为一个属性(_c)
-(instancetype)initWithR:(double)r O:(CGPoint)o; //自定义初始化方法
-(BOOL)isCoverOtherCircum:(Circum*)y;//判断两圆是否相交的方法
@end
“Circum.m”
#import "Circum.h"
@implementation Circum
//带有监听的初始化方法:1.创建键值观察方法2.键值回调3.释放dealloc
- (instancetype)initWithR:(double)r O:(CGPoint)o
{ //谁 让 谁 观察哪一个属性(1.键值观察的方法)
[self addObserver:self forKeyPath:@"r" options:NSKeyValueObservingOptionNew context:@"r"];
self = [super init];
if (self)
{
self.o=o;
self.r=r;
_s=3.14*r*r;
_c=3.14*2*r;
}
return self;
}
//2.键值回调的方法
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSString * con=(__bridge NSString *)context;
if ([con isEqualToString:@"r"])
{
NSNumber *r_con=change[@"new"];
double r=[r_con doubleValue];
_s=r*r*3.14; //s是只读属性,无法赋值,可用_s内部变量
_c=2*r*3.14;
}
}
//3.释放dealloc
-(void)dealloc
{
[self removeObserver:self forKeyPath:@"r"];
}
//判断两圆是否相交的方法
-(BOOL)isCoverOtherCircum:(Circum*)y //y是同种类型的对象
{
double d=(y.o.x-self.o.x)*(y.o.x-self.o.x)+(y.o.y-self.o.y)*(y.o.y-self.o.y);
double r1=(self.r+y.r)*(self.r+y.r);
if (r1>d)
{
return true;
}
else
return false;
}
/* ***************不带监听的初始化方法(对象的r值不能改变)**************
- (instancetype)initWithR:(double)r O:(CGPoint)o//CGPoint是一个结构体,有float x,float y。
{
self = [super init];
if (self) {
self.r=r;
self.o=o;
_s=self.r*self.r*3.14; //s是只读属性,无法赋值,可用_s内部变量
_c=2*self.r*3.14;
}
return self;
}
*/
@end
“main.m”
#import <Foundation/Foundation.h>
#import "Circum.h"
/*
1,类的声明
2,属性声明(成员变量,内部数据)
(属性控制符:线程同步类,内存模式,读写权限)
3,方法声明及实现
4,对象的创建
5,对象通过点语法调用属性
6,对象直接调用方法
7,自定义初始化方法
8,便利构造器方法(之前很重要,现在不重要)
9,self关键字
10,键值编码:古老赋值方式
11,键值观察
12,销毁处理
*/
int main(int argc, const char * argv[]) {
@autoreleasepool {
Circum *c=[[Circum alloc]initWithR:2 O:CGPointMake(8, 10)];
NSLog(@"%g ",c.c); //周长被定义为属性,可用.操作
// c.r=5; //不用键值监听,半径无法改变,监听后r可以改变
//NSLog(@"%g ",c.c);
Circum *c1=[[Circum alloc]initWithR:3 O:CGPointMake(4, 5)];
NSLog(@"%g ",c1.c);
Circum *c2=[[Circum alloc]initWithR:4 O:CGPointMake(3,4)];
NSLog(@"%g ",c2.s);
if ([c isCoverOtherCircum:c1])
{
NSLog(@"圆c与圆c1相交! ");
}
else
{
NSLog(@"圆c与圆c1不相交 ");
}
}
return 0;
}