zoukankan      html  css  js  c++  java
  • oc1基础知识编写

    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;

        

    }

  • 相关阅读:
    QTableView表格滚动条样式(QSS真是细致到家了)
    窗体间传递数据(跨控件跨类),三种情况与处理方法
    16Khz音频定时触发采样DMA存储过程
    两种解决Qt5显示中文乱码的方法(使用QStringLiteral和#pragma execution_character_set("utf-8")两种方法)
    C语言数组内存初始化
    13 Amazing Component Sets Driving Success In Delphi Berlin On Android And IOS
    不要短期利益,要长期利益;要创新,但要反对盲目创新
    有关FTPS和VNP的详解
    (十六)备忘录模式详解(都市异能版)
    百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
  • 原文地址:https://www.cnblogs.com/caomeixiangni-324/p/4702438.html
Copyright © 2011-2022 走看看