OC笔记:类的基础知识及代码示例

1.类的定义:

类=属性+方法;

-属性代表类的特征

-方法是类能对变化做出的反应

类定义的格式:类的声明和类的实现组成

-接口(类的声明):@interface 类名:基类的名字

.类名首字母要大写

.冒号表示继承关系,冒号后面的是类的父类

.NSObject是OC所有类的基类

.类的声明放在“类名+.h”文件中,要由两部分组成:实例变量和方法

-实现(类的实现):@implementation类名

.方法实现

-都用@end结束c

2.类的使用:

OC中,对象通过指针来声明   如:ClassA *object;

OC中对象的创建,使用alloc来创建一个对象,编译器会给object对象分配一块可用的内存地址,然后需要对对象进行初始化即调用init方法,这样这个对象才可以使用,如:

Person *person=[Person alloc];      //创建对象分配空间

person=[person init];               //初始化赋初值,

初始化后:int=0,char=“*0”?,bool=FALSE

同一个类的每个对象有不同的实例变量的存储空间

同一类的每个对象共享该类的方法

方法嵌套的形式来调用,如:ClassA *object=[[ClassA alloc] init];

3.类的访问权限

三种访问权限:

-公有的:@public

-私有的:@private

-保护的:@protected

属性默认的权限是保护的

方法默认的权限是公有的

4.方法定义

无参无返: -(void)print;

无参有返: -(Person *)register;

有参无返: -(void)intuit:(int)newId;

有参有返: -(Person *)init:(int)newId;

带一个参数的方法

-(Person *) init:(int) newID;

带两个参数的方法:

-(Person *) init:(int) newID:(int) newAge;

“:”是方法名的一部分

-第一个方法名:init

-第二个方法名:init:

-第三个方法名:init::

多参数方法定义:

-(Person *)initWithId:(int) newID andAge:(int) newAge andName:(NSString *)name;

可以在方法名前面加任意标记如“WithId”,“andAge”,“andName”以此类推

5.实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象,即实例化对象
        Dog *haShiQi=[[Dog alloc]init];
        //方法调用
        [haShiQi bark];
        //属性赋值
        haShiQi->health=120;
        haShiQi->name=@"哈士奇";
        NSLog(@"狗的姓名:%@,健康值%d",haShiQi->name,haShiQi->health);
    }
    return 0;
} 

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
    NSLog(@"汪汪");
}
@end

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //声明类Dog,继承根基类NSObject
//类的属性
{
    @public;               //设置类的属性为公有(一般不允许使用)
    NSString *name;
    int health;
}
//对象方法
-(void)bark;
@end 

6.类方法和对象方法对比

·对象方法(实例方法)

-以减号“-”开头

-只能让对象调用,没有对象,这个方法根本不可能被执行

-对象方法能访问实例变量

·类方法

-以加号“+”开头

-只能用类名调用,对象不能调用

-类方法中不能访问实例变量(成员变量)

-使用场合:当不需要访问成员变量的时候,尽量用类方法

-类方法和对象方法可以同名7.属性的存取方法

·获取属性值(getter)方法的定义

-作用:返回对象内部的成员变量

-命名规范:get方法的名称一般就跟成员变量同名

·设置属性的值(setter)方法的定义

-作用:用来设置成员变量,可以在方法里面过滤掉一些不合理的值

-命名规范:

-方法都是以set开头,而且后面跟上成员变量名,成员变量名的首字母必须大写

-形参名称不要跟成员变量同名

8.getter,setter方法实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象,即实例化对象
        Dog *haShiQi=[[Dog alloc]init];
        //方法调用
        [haShiQi bark];
        //属性赋值
        [haShiQi setName:@"哈士奇"];   //调用setter方法赋值
        [haShiQi setHealth:120];
        NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
    }
    return 0;
}

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
    NSLog(@"汪汪");
}
//setter方法
-(void)setName:(NSString *)newName{
    name=newName;
}
//getter方法
-(NSString *)name{
    return name;
}
//setter方法
-(void)setHealth:(int)newHealth{
    health=newHealth;
}
//getter方法
-(int)health{
    return health;
}
@end 

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //声明类Dog,继承根基类NSObject
//类的属性
{
    NSString *name;
    int health;
}
//对象方法
-(void)bark;
-(void)setName:(NSString *)newName;         //setter方法
-(NSString *)name;                          //getter方法
-(void)setHealth:(int)newHealth;
-(int)health;
@end

9.自动生成属性的存取方法

·@property语法

·@synthesize

·封装的好处:

-过滤不合理的值

-屏蔽内部的赋值过程

-让外界不必关注内部的细节

10.自动生成属性的存取方法实例

main:

#import <Foundation/Foundation.h>
#import "dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建对象,即实例化对象
        Dog *haShiQi=[[Dog alloc]init];
        //方法调用
        [haShiQi bark];
        //属性赋值
        [haShiQi setName:@"哈士奇"];
        [haShiQi setHealth:120];
        NSLog(@"狗的姓名:%@ 健康状况:%d",haShiQi.name,haShiQi.health);
    }
    return 0;
}

Dog.m:类的实现

#import "Dog.h"     //引用类的声明文件
@implementation Dog
//方法实现
-(void)bark{
    NSLog(@"汪汪");
}
@synthesize name,health; //封装,代替了setter,getter
@end

Dog.h:类的声明

#import <Foundation/Foundation.h>
@interface Dog : NSObject   //声明类Dog,继承根基类NSObject
//类的属性
{
@public;               //设置类的属性为公有
    NSString *name;
    int health;
}
-(void)bark;
@property int health; //封装,代替了setter,getter
@property NSString *name;
@end

11.方法重载

·OC中不是严格的函数重载

命名冲突:

-(int)doSomething(int)X;

-(int)doSomething(float)X;

命名冲突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(float)x:(int)y;

不冲突:

-(int)doSomething(int)x:(int)y;

-(int)doSomething(int)x: andY:(float)y;

因为一个是“doSomething:”,“另一个是doSomething::”

12.继承

·不改变原来模型的基础上,拓充方法

·建立了类与类之间的联系

·抽取了公共代码

·减少冗余代码

·坏处:耦合性强

(第一次用,渣排版,请谅解~)

时间: 2024-10-13 11:20:44

OC笔记:类的基础知识及代码示例的相关文章

[terry笔记]data guard基础知识

如下介绍了data guard的基础知识,整理自网络: Data Gurad 通过冗余数据来提供数据保护,Data Gurad 通过日志同步机制保证冗余数据和主数据之前的同步,这种同步可以是实时,延时,同步,异步多种形式.Data Gurad 常用于异地容灾和小企业的高可用性方案,虽然可以在Standby 机器上执行只读查询,从而分散Primary 苏菊哭的性能压力,但是Data Gurad 决不是性能解决方案. 在Data Gurad 环境中,至少有两个数据库,一个处于Open 状态对外提供服

APUE 学习笔记(一) Unix基础知识

1. Unix 体系结构 内核的接口被称为系统调用 公用函数库构建在系统调用接口之上 应用软件既可以调用公用函数库,也可以直接进行系统调用 2. 文件和目录 目录操作函数:opendir---> readdir---> closedir struct dirent 结构体 stat 系统调用 3.程序.进程.线程 程序:存放在磁盘上.并处于某个目录中的一个可执行文件.使用exec系列函数将程序从磁盘读入存储器,并使其执行 进程:程序的执行实体.进程控制的3个函数:fork.exec.waitp

《大话设计模式》笔记-基础知识1:UML类图基础知识

好多计算机技术书籍或者文章中常用到UML类图,本书作者介绍每一种设计模式就是用类图+面向对象语言小程序(用的C#,其基础知识另文介绍)+人物对话解释知识点.本文就是介绍<大话设计模式>中所用到UML类图的基础知识. 上图是一个整体的图,特别要注意各种样式的箭头,下文分别用局部小图说明各知识点. 类 类图分三层: (1)      类名称,如果是抽象类就用斜体标识.本例,类名称是"动物",且其是一个抽象类. (2)      类特性,通常是字段和属性.本例,类特性是"

马哥2013年运维视频笔记 day01 系统基础知识

没有什么可说的,马哥的Linux视频真的是精品,这里把我学习以后的笔记整理到这里,以备不时之需. day01 ①.Linux学习的一些方法论 做好总结,必须学习完一个知识点以后要用自己的思想把它彻底的给别人讲明白,这样这个知识就真的融入你们的知识体系了,否则看着会了,其实是一知半懂.比较好的方法就是写总结,记笔记,然后汇总成博客,这样可以锻炼你对问题条理化理解,这会影响你们的一生,是隐形的影响. 都说Linux很难,不然怎么体现你的价值啊?只有基础打牢,之后的中高级内容才能从容不迫.要做好知识结

学习笔记-《Linux基础知识之挂载详解(mount,umount及开机自动挂载)》

<Linux基础知识之挂载详解(mount,umount及开机自动挂载)>来源:Linux社区  作者:chawan 原文链接 http://www.linuxidc.com/Linux/2016-08/134666.htm 以下是学习作者这篇文章做的一些摘要及学习体会. 重要概念(经典原文引述) 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点

TTL电平,CMOS电平,OC门,OD门基础知识

转载: http://blog.csdn.net/qq258711519/article/details/10957253 一.TTL  TTL集成电路的主要型式为晶体管-晶体管逻辑门(transistor-transistor logic gate),TTL大部分都采用5V电源.  1.输出高电平Uoh和输出低电平Uol  Uoh≥2.4V,Uol≤0.4V  2.输入高电平和输入低电平  Uih≥2.0V,Uil≤0.8V    二.CMOS  CMOS电路是电压控制器件,输入电阻极大,对于

【 学习笔记 】memcached基础知识

源地址:http://kb.cnblogs.com/page/42731/ 仔细学习了下,以下是记录的笔记备忘内容. 一.memcached是什么?    memcached是高性能的分布式内存缓存服务器.    一般使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度.提高可扩展性 memcached的特征:        1. 协议简单        2. 基于libevent的事件处理        3. 内置内存存储方式        4. memcache

Java学习笔记一(基础知识)

1  java基本概念 JDK  java  develop Kit   Java开发环境,三种版本J2SE(主要用与桌面和小程序的开发).J2EE(主要用户企业级的开发).J2ME(主要用于手持设备的开发) Jre  Java run environment Java运行环境, 2 java的基本特点 1)简单:java的编程风格类似C++.除去C++中容易产生错误指针,结构,枚举等.封装了很多类库. 2)面向对象的:完全面向对象的,支持继承.重载.多态等机制 3)健壮性:检查程序在编译或者运

TTL电平,CMOS电平,232/485电平,OC门,OD门基础知识

 1.RS232电平 或者说串口电平,有的甚至说计算机电平,所有的这些说法,指得都是计算机9针串口 (RS232)的电平,采用负逻辑, -15v ~ -3v 代表1 +3v ~ +15v 代表0 2.RS485电平和RS422电平 由于两者均采用差分传输(平衡传输)的方式,所以它们的电平方式,一般有两个引脚 A,B 发送端 AB间的电压差 +2 ~ +6v:1 -2 ~ -6v:0 接收端 AB间的电压差 大于 +200mv  1 小于 -200mv  0 定义逻辑1为B>A的状态: 定义逻辑0