OC语法2——OC的类,方法,成员变量的创建
类的创建:
与Java不同的是,OC创建一个类需要两个文件(.h和.m文件)
1> xxx.h:声明文件。用于声明成员变量和方法。关键字@interface和@end成对使用。
声明文件只是声明该类里成员变量和方法的格式(返回值类型,参数类型等),并不会实现它们。
在OC中继承用冒号表示,所有类都是继承于NSObject的,所以Sudent:NSObject。(这是和Java不同的,Java中所有类都继承于Object,但不用每定义一个类都写明继承关系,所有类都是默认继承于Object类的)。
Student.h文件:
@interface Student : NSObject
NSString * name;
int age; - (NSString *)name;
-(void)setName:(NSString *)name; -(int)age;
-(void)setAge:(int)age;
@end
2> xxx.m:实现文件。用于实现 .h 文件中声明的方法。关键字@implementation和@end成对使用。
注意:
在C中,包含预处理指令是#include<xxx>或#include"xxx",#include包含指令有个缺陷就是不会判断该文件是否已经被引入类要包含的文件,很有可能造成重复包含而出错,为了避免此问题,我们通常采用条件编译的方法引入文件,很麻烦。
OC中的包含预处理指令是#import<xxx>或#import"xxx",它有个优势就是可以自动判断要包含的文件是否已被引入,若没有它才引入,很方便。
方法的创建:
.h 声明文件只定义方法的格式。并不去实现方法体。
方法 - (void)setAge: (int)age; 表示定义一个动态方法,返回值为void型,方法名是setAge:,参数类型为int型,参数名为age。
注意:在OC中
“-”:动态方法(对象的方法); “+”:静态方法(类的方法)。
一个参数一个冒号,方法名包括冒号(方法名为setAge:)。
在 .h 文件中定义的方法默认都是public类型的,不能更改。若要定义私有方法,则应该直接在 .m 文件定义并实现。
OC定义方法时,返回值类型和参数类型都必须放在括号()里。
定义成员变量:
成员变量的作用域有3种:
@public 全局都可访问;
@protected 本类和子类可访问;
@private 只有本类可以访问。
在 .h 文件中声明的成员变量默认都是@protected型的。
注意:成员变量是声明在 .h 文件中的{}内部的。也可以说声明成员变量时必须用{}包住!
创建对象:
在Java中,创建一个对象我们是通过new Student()创建的,比如
Student stu = new Student();
这句代码其实做了两件事:
1.先在内存中为该对象分配了一块存储空间。
2.调用Student的构造方法进行初始化。
同样的,OC中的类创建一个对象也是这两个步骤哦:
Student * stu = [Student alloc];
stu = [stu init];
首先,Student类调用静态方法alloc在内存中开辟一块存储空间。
然后,把开辟出的这块内存地址赋给指针变量stu。(OC中所有的对象都是指针变量。真正的对象是那块开辟的内存,而stu只是指向它的指针,或者说引用)。
最后,调用stu的构造方法init初始化stu对象,并把初始化了的对象再次赋给stu(返回值为该对象)。
注意:
OC没有垃圾回收机制,所以创建的对象要自己手动销毁。
[stu release];
OC语法2——OC的类,方法,成员变量的创建的更多相关文章
- 深入理解PHP内核(十四)类的成员变量及方法
原文链接:http://www.orlion.ga/1237/ 类的成员变量在PHP中本质是一个变量,只是这些变量都归属于某个类,并且给这些变量是有访问控制的. 类的成员方法在PHP中本质是一个函数, ...
- 【IOS 开发】Object - C 面向对象 - 类 , 对象 , 成员变量 , 成员方法
. 一. 类定义 类定义需要实现两部分 : -- 接口部分 : 定义类的成员变量和方法, 方法是抽象的, 在头文件中定义; -- 实现部分 : 引入接口部分的头文件, 实现抽象方法; 1. 接口部分定 ...
- python中的类的成员变量以及property函数
1 python类的各种变量 1.1 全局变量 在类外定义的变量. 1.2 类变量 定义在类里面,所有的函数外面的变量.这个变量只有一份,是所有的对象共有的.在类外用“类.”来引用. 1.3 实例变量 ...
- 解决"VC6.0的ClassView里不能显示类或成员变量"问题
VC6.0是微软1998年公布的,是一款非常经典的编辑器.然而它有几个非经常见的bug,比方, .cpp文件打不开,智能提示出现异常.这里介绍"VC6.0的ClassView里不能显示类或成 ...
- Java面向对象学习-----类的成员变量
类的成员变量: 猜数字游戏:一个类A有一个成员变量v,通过随机产生一个100内的整数给v赋值.定义一个方法,对A类的成员变量v进行猜. 没有猜对的情况下提示如果大了则提示大了,小了则提示小了,并且 ...
- Java采用反射技术创建对象后对目标类的成员变量和成员方法进行访问
实现: package com.ljy; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * * @Class ...
- fielderror里的fieldName代表的是jsp里的fieldName还是Action类的成员变量?(待解答)
1.值栈的Action对象中会有一个fielderror属性,代表着字段错误. fielderror是Map<String,List<String>>类型 例如下面的值栈里可看 ...
- C++类中成员变量的初始化总结(转帖)
本文转自:C++类中成员变量的初始化总结 1. 普通的变量: 一般不考虑啥效率的情况下 可以在构造函数中进行赋值.考虑一下效率的可以再构造函数的初始化列表中进行. 1 class CA ...
- 派生类地址比基类地址少4(CDerived对象的起始地址存放的是虚表指针vptr,也就是子类的第一项内容。接下来的是基类的成员变量,接下来再是自身的成员变量)
大家对虚表并不陌生,都知道每个含有虚函数的类对象都有1个虚指针,但是在现实使用中,却总是因为这而调试半天,才发现原来是虚指针惹的祸.我这几天在调试代码时候也中招了,我的问题是这样的,如下图,CTree ...
- [C++] 类的成员变量和成员方法
类具有成员变量和成员方法 成员变量用来描述某个对象的具体特征,是静态的,也称为成员属性,这些属性一般设置为私有,仅供类的内部使用. 成员方法用来描述某个对象的具体行为,是动态的,也成为成员函数,这些属 ...
随机推荐
- jQuery事件绑定方法bind、 live、delegate和on的区别
我们试图绑定一些事件到DOM元素上的时候,我相信上面这4个方法是最常用的.而它们之间到底有什么不同呢?在什么场合下用什么方法是最有效的呢? 1.准备知识 当我们在开始的时候,有些知识是必须具备的: 1 ...
- Nodejs随笔(二):像可执行shell脚本一样,运行node 脚本!
在每次编写nodejs脚本的时候,只需在程序的开头加上如下代码(写过shell脚本的人应该很熟悉): #!/usr/local/bin/node 同时,修改文件权限为可执行: mesogene@mes ...
- iOS开发那些事儿(五)Objective-C浅拷贝与深拷贝
浅拷贝:copy操作出来的对象指针直接指向模板的地址.即两个对象公用一块内存地址 #import <Foundation/Foundation.h> int main(int argc, ...
- 【.Net】文件并发(日志处理)--队列--Redis+Log4Net
多线程操作同一个文件时会出现并发问题.解决的一个办法就是给文件加锁(lock),但是这样的话,一个线程操作文件时,其它的都得等待,这样的话性能非常差.另外一个解决方案,就是先将数据放在队列中,然后开启 ...
- 表达式求值(河南省第四届ACM试题-C题)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定指定的一个由3种函数组成的表达式,计算其数值. [题目分析] 一开始以为是后缀表达式,后来抽了没想出来,最后用了递归的方法解 ...
- mysql5 乱码问题解决方案
今天在写项目时碰到了mysql数据库数据乱码的问题,也从网上查了很多方法,前后折腾了两个小时才终于调整好.现在就把调整过程中碰到的一些问题记录下来: 1.项目是SSH架构,一开始我以为是调用hiber ...
- Java 中使用Jackson反序列化
Build.gradle: compile group: 'org.codehaus.jackson', name: 'jackson-mapper-lgpl', version: '1.9.13' ...
- shell script 零碎知识
1.test命令的测试功能 -e 文件名是否存在 -f 文件名是否存在且为文件 -d 文件名是否存在且为目录 范例1 检查/dmtsai是否存在,存在输出 exist 不存在输出 Not ...
- struts2的对象工厂(ObjectFactory)
ObjectFactory,是xwork中很重要的一个类,是产生action的地方.单独使用xwork的时候,action都是这个类创建的.struts2包装了ObjectFactory,自成了一个S ...
- 欧几里得求最大公约数--JAVA递归实现
欧几里得算法求最大公约数算法思想: 求p和q的最大公约数,如果q=0,最大公约数就是p:否则,p除以q余数为r,p和q的最大公约数即q和r的最大公约数. java实现代码: public class ...