找人做建筑施工的网站,网站包括哪些内容吗,黑彩网站怎么做,怎么编辑网站本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念#xff0c;概念上简单来讲类是它是一组关系密切属性的集合#xff0c;所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种#xff0c;比如has a#xff0c; is a#xff0c;has some等概念上简单来讲类是它是一组关系密切属性的集合所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种比如has a is ahas some等关系是一种抽象过程源于对事务的理解同时还要平衡开发的成本这是一门艺术 类的结构
OOP标准结构
下图是一张通用的类完整结构图表示本章暂时只讲最基础的部分后续章节会围绕这个基础逐渐深入展开。 几点需要说明下
在OOP世界中所有的类都有一个默认的父类一般称为基类。比如java里的基类名为ObjectObjectiveC中的基类名称为NSObject。OOP中不允许多继承ObjC也不例外协议可以实现多个即一个类可以实现多种不同的协议
OOP在ObjC中的实现
ObjectiveC中的代码实现模式 几点需要说明下 在ObjectiveC中会把一个类拆分成两个文件接口(.h)和实现(.m。ObjectiveC中的文件只是一个载体具体的定义是由关键标识来定义的比如在一个.h文件中可以定义多个接口定义在一个.m文件中也可以定义多个接口的实现 在同一个.m文件中书写全部的代码这种方式并不推荐因为会给维护带来很大问题。
#import Foundation/Foundation.h
// ----------------------类声明----------------------------
interface Fraction : NSObject
end // Tire// -----------------------类实现---------------------------
implementation Fraction- (NSString *) description
{return (I am a tire. I last a while);
} // descriptionend // Tire// -----------------------main入口函数---------------------------
int main(int argc, const char * argv[]) {autoreleasepool {Fraction *engine [Fraction new];}return 0;
}// main所以推荐的类组织方式是
分离接口和实现
把interface和implementation代码定义在同一个.m文件中这种方式呢做练习用还可以如果是正式的程序就不太方便了。因为这样的话在代码行数比较多时维护会是个大总是所以最好的方法是分离接口和实现实现分而治之如下
创建类文件
使用XCode工具在“New File时”选择Cocoa class创建文件时会自动分离.h和.m如下图所示 在下一步窗口中添填写新创建的类名称也可以选择需要继承的父类父类可以是自定义的类 最后设置文件存放目录也可以设置目标和群组复杂的项目可以有多个组和目标
GroupGroup主要是用于管理项目的源文件比如可以创建两个Group一个用于存放UI文件一个用于存放处理程序类。Group不是java中package的概念它是XCode的一个逻辑分组并不会真正的移动文件位置甚至可以让Group指向磁盘上某个特定的文件夹Target简单可理解应用编译后的运行环境比如一个IOS程序其可以设置多个不同的目标如iphone12、iphone13等每个目标采用不同的配置这样也比较方便测试其兼容性
.h类声明实现
相当于类功能的描述默认格式上文件名与类名相同。在.h文件中一般用于定义类的interface指令、公共的struct定义、enum常量、#defines和extern全局变量。新创建一个Fraction.h文件代码示例如下
#import Foundation/Foundation.hinterface Fraction : NSObject-(void) print;end //end Fraction.m类功能实现
相当于类功能的实现默认格式上文件名与类名相同。在.m一般用于定义类的implementation指令、私有的struct定义、extern全局变量定义。新创建一个Fraction.m文件
如果创建的是以.mm为后缀的文件则可以同时使用C和ObjectiveC语法示例代码如下
#import Fraction.himplementation Fraction {//私有属性int numerator;int denominator;
}
- (void) print {NSLog(%i / %i, numerator, denominator);
}- (void) setNumerator:(int) n {numerator n;
}- (void) setDenominator:(int) d {denominator d;
}
end分离后的代码会有如下特点
在interface中引入的头文件可直接继承到implementation实现中不必重复导入比如在.h文件中import Foundation/Foundation.h则.m文件中就不需要再写一遍了虽然可以在 implementation 实现中也可以定义 interface 中未出现过的方法和变量但要注意不要和.h文件中定义的变量名重复在implementation或interface中定义的方法的参数名称尽量不要和自定义的变量重名所以给变量前面加上self是一个非常好的习惯比如下列代码
//声明部分
-(void) setNumerator: (int) name;//实现部分
NSString *name;
- (void) setDenominator:(int) name {name name;//上面这行代码必须替换为如下代码否则会发生错误self.name name;
}类的实例化
类可以通过new或alloc关键字实现实例化类的实例化是一大块内容本节只需简单了解其使用调用如果用XCode创建工程则会默认生成一个名为main.m的文件里面包含一个main方法注意一个工程只允许存在一个main()方法。
// -----------------------main入口函数---------------------------
int main(int argc, const char * argv[]) {autoreleasepool {Fraction *engine [[Fraction alloc] init];}return 0;
}类的组合
上述就是最简单类的实现下面看到类封装的基本用法。也是一种最简单的设计模式组合。比如描述一辆汽车 对象组合其实是一种设计思想并不是一种技术框架实现。类的扩展有分类和协议两种技术另一种技术就是合成对象它可以定义一个类包含其他类的一个或多个对象这个新类就是所谓的合成对象。即手动处理比如父子类的实现可修改成如下代码
interface Car: NSObject{Tires *tires[4]; //4条轮胎Engine *engine; //1个引擎
}interface Tires: NSObject{int par; //标准的气压值int position;//安装位置
}interface Engine: NSObject{NSString *name; //引擎名称
}