OC基础--构造方法
OC语言中类的构造方法学了两种:
一、方法一:[类名 new] 例:[Person new]
缺点:可扩展性不强,假如在Person类中有_age 成员变量,在初始化时想让_age 中的值为20,new方法办不到,只能是创建类之后重新赋值
二、方法二:
//返回一个已经分配好内存的对象,但是这个对象没有经过初始化
Person *p = [Person alloc];
//给指针变量p指向的对象进行初始化操作
p = [p init];
合并写法,以后常用:类名 *指针变量名 = [[类名 alloc] init];例----->Person *p = [[Person alloc] init];
原理:new方法内部其实做了两件事:
1.分配内存给对象 +alloc--->类方法
2.初始化对象 -init--->对象方法,init方法称为构造方法,构造方法其实是用来初始化对象的。
三、自定义构造函数注意事项-->重写-(id) init方法,其中:
1)id是万能指针,不要再加上*;id类型能指向任何OC对象
2)先要初始化父类中的成员变量-->[super init]
3)将返回的指向父类对象的指针变量赋值给self,也就是当前类-->self = [super init];
4)一定判断self是否为空if(self != nil) 或者 if(self)-->如果self中没有父类的地址,self就等于0,也就是false
代码如下:
-(id) init
{
//为了让父类中的成员变量也能初始化
self = [super init];
if (self != nil)//判断self不为空,说明父类初始化成功
{
_age = ;//想要初始化的属性或其他
}
return self;//构造函数一定是返回当前类
}
必须简写:-->以后常用的方式
- (id) init
{
// 为了让父类中的成员变量也能初始化
if (self = [super init])
{ // 说明父类初始化成功
_age = ;
} return self;
}
四、自定义构造方法代码实例:
#import <Foundation/Foundation.h>
// 声明
@interface Person : NSObject
{
int _age;
}
- (void) setAge:(int)newAge;
- (int) age; // 自定义构造方法
/*
规范:
1.返回值是id类型
2.方法名都以init开头
*/
- (id) initWithAge:(int)age; @end // 实现
@implementation Person
- (void) setAge:(int)newAge
{
_age = newAge;
} - (int) age
{
return _age;
} - (id) initWithAge:(int)age
{
if (self = [super init])
{
_age = age;
}
return self;
} @end int main()
{
/*
[Person new];
[[Person alloc] init];
*/
Person *p = [[Person alloc] initWithAge:]; NSLog(@"age=%d", [p agec]); return ;
}
OC基础--构造方法的更多相关文章
- OC基础--构造方法 id类型
new方法实现原理: new做了三件事情 1.开辟存储空间 + alloc 方法 2.初始化所有的属性(成员变量) - init 方法 3.返回对象的地址 [Person new]; == [[Pe ...
- 【OC基础语法考试】
OC基础语法已经全部学完,但是这些知识只是最基础的,还有很多高级知识,这个可能需要后面慢慢的去学习才能体会到.接下来我会总结前面的OC基础语法,如果大家发现有什么不正确的地方,请指正,小弟是新生,多请 ...
- OC基础笔记目录
OC基础(1) Objective-C简介 OC和C对比 第一个OC程序 面向对象思想 OC基础(2) 类与对象 类的设计 第一个OC类 对象方法的声明和实现 类方法的声明和实现 OC基础(3) 对象 ...
- OC的构造方法与分类知识点总结
OC语言构造方法: 用来初始化对象的方法,对象方法,以减号开头 为了让对象创建出来,成员变量就会有一些固定的值 重写构造方法的注意点: 先调用父类的构造方法([super init]) 再进行子类内部 ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- 李洪强iOS开发之OC语言构造方法
OC语言构造方法 一.构造方法 (一)构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; New方法的内部会分别调用两个方法来完成2件事情,1)使用alloc方法 ...
- OC基础 文件管理
OC基础 文件管理 1.文件管理类NSFileManager对象的创建: NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1 ...
- OC基础 NSDate
OC基础 NSDate #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @auto ...
随机推荐
- 数据库系统概论(第5版) P262 例8.12
#include <iostream> #include <stdlib.h> #include <stdio.h> #include <Windows.h& ...
- 给Testerhome测试小道消息做个硬广告
测试小道消息在荔枝FM上的粉丝马上就要超过1k了.还差17个我们就能够开通社区了.欢迎大家都来收听测试小道消息哈--更多精彩内容还希望大家下载荔枝fm.关注FM245329. 如果你还不了解测试小道消 ...
- Android驱动调试利器Busybox之初体验
工欲善其事必先利其器,之前做WinCE开发时,经常写一些小工具以提高开发调试的效率,如WinCE驱动调试助手.WinCE串口调试助手.WinCE6.0寄存器访问工具.WinCE远程桌面助手和S3C24 ...
- 三维网格形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- android 合并两个jar包
你所要导出的类里边用到了别的jar包.比如说你写的类连接了数据库,用到数据库驱动包oracl.jar(也就是你导入到Myeclipse或eclipse的jdbc包).. .在dos环境下,进入到D盘的 ...
- 转载:有关SQL server connection Keep Alive 的FAQ(2)
转: http://blogs.msdn.com/b/apgcdsd/archive/2012/05/18/sql-server-connection-keep-alive-faq-2.aspx 在下 ...
- Wireshark命令行工具tshark
Wireshark命令行工具tshark 1.目的 写这篇博客的目的主要是为了方便查阅,使用wireshark可以分析数据包,可以通过编辑过滤表达式来达到对数据的分析:但我的需求是,怎么样把Data部 ...
- [tools]tcp/udp连通性测试
一 端口连通性测试意义 测试网络端口可达性,确保给某些使用特定端口的app做链路连通性检测.使它们能够正常的运行起来. 二 法1 使用newclient发包,彼端tcpdump抓包观察是否能收到包 ...
- Linux 进程通信(共享内存区)
共享内存是由内核出于在多个进程间交换信息的目的而留出的一块内存区(段). 如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映像到自己的私有地址空间中. 如果一个进程更新了段中的数据,其他进程也 ...
- python package 的两种组织方式
方式一/package1/ .../__init__.py # 空文件 .../class1.py class Class1: def __init__(self): self.name = &quo ...