oc-28-构造函数
Dog.h
#import <Foundation/Foundation.h> @interface Dog : NSObject
{
NSString *_name;
int _age;
char *cc;
}
@end Dog.m
#import "Dog.h" @implementation Dog // 谁调用Self所在的方法,self就指向谁,self就是谁.
- (instancetype)init
{
/**
* 重写init方法是有条件的
*/
// self是谁?DogSon
if (self = [super init]) {//初始化父类的
// 子类的初始化等等其他操作,在这个花括号里面做
_age = ;
NSLog(@"Dog---%@",self);
}
return self;
} @end DogSon.h
#import "Dog.h" @interface DogSon : Dog
// 自定义构造方法
// 命名的时候:init后边接的单词,首字母必须大写.
- (instancetype)initWithName:(NSString *)name andAge:(int)age;
@end /*
1.自定义构造方法 1.自定义构造方法的规范
(1)一定是对象方法,以减号开头
(2)返回值一般是id(instancetype)类型
(3)方法名一定以initWith开头 3.自定义构造方法的使用注意
(1)自己做自己的事情
(2)父类的方法交给父类的方法来处理,子类的方法处理子类自己独有的属性
*/ DogSon.m
#import "DogSon.h" @implementation DogSon
- (instancetype)initWithName:(NSString *)name andAge:(int)age
{
// 必须调回父类的构造方法
if (self = [super init]) {
_name = name;
_age = age;
}
return self;
}
//- (instancetype)init
//{
// if (self = [super init])
// {
// _age = 10;
// }
// return self;
//}
@end main.m
//05-12 /**
new一下,就能有一个对象.
1.分配内存空间 + alloc
2.初始化. - init 构造方法:指的就是初始化方法. 需求1:创建10只狗,让这些狗在创建时,所有的年龄都是1岁.
修改构造函数可以考虑重写init方法. 初始化成员变量
OC对象初始化为nil
C语言指针初始化为:NULL
基本数据类型初始化:0 需求2:创建10只小狗,让这些狗在创建时,可以手动进行成员变量的赋值.
*/
#import <Foundation/Foundation.h>
#import "DogSon.h" int main(int argc, const char * argv[]) {
@autoreleasepool { DogSon *s = [[DogSon alloc] initWithName:@"旺财" andAge:]; }
return ;
} /**
1.构造方法 1.构造方法的调用 完整的创建一个可用的对象:Person *p=[Person new]; new方法的内部会分别调用两个方法来完成3件事情: (1)使用alloc方法来分配存储空间(返回分配的对象);
(2)使用init方法来对对象进行初始化。
(3)返回对象的首地址.
可以把new方法拆开如下: (1).调用类方法+alloc分配存储空间,返回未经初始化的对象 Person *p1=[Person alloc];
(2).调用对象方法-init进行初始化,返回对象本身Person *p2=[p1 init];
(3).以上两个过程整合为一句:Person *p=[[Person alloc] init]; 说明: (1)init方法就是构造方法,是用来初始化对象的方法,注意这是一个对象方法,以减号开头。默认初始化完毕后,所有成员变量的值都为0。
(2) alloc
向某个类发送alloc消息的结果
为该类分配内存,以存放该类的全部实例变量
还将这块内存区域全部初始化为0
注意
一个刚刚分配的对象并不能立即使用
需要先初始化该对象,然后才能使用它
但由于未进行初始化, 随后可能出现一些不可预测的行为
*/
oc-28-构造函数的更多相关文章
- OC - 28.模拟时钟
效果图 实现思路 该示例通过隐式动画实现 表盘通过显示在imageView中的一张图片来实现 在表盘上绘制(时分秒)三条直线,分别位于不同的图层,且时针位于最下层,秒针位于最上层 设置直线为圆角 直线 ...
- oc总结 --oc基础语法相关知识
m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...
- OC总结 【OC基础语法相关知识】
m是OC源文件扩展名,入口点也是main函数,第一个OC程序: #import <Foundation/Foundation.h> int main(int argc, const cha ...
- C# 多线程编程 ThreadStart ParameterizedThreadStart
原文地址:http://club.topsage.com/thread-657023-1-1.html 在实例化Thread的实例,需要提供一个委托,在实例化这个委托时所用到的参数是线程将来启动时要运 ...
- C# 通讯网关开发
C# 通讯网关开发 楼主从12年毕业大部分时间一直从事于通讯网关的开发,刚刚学那会连C#是啥都不知道,就直接入手网关开发,前前后后到现在也算是弄了5.6个通讯协议,后来看到北风之神的socket框架和 ...
- js 类
---恢复内容开始--- <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset ...
- Chapter6(函数) --C++Prime笔记
1.重载函数,也就是说一个名字可以对应几个不同的函数. 2.内置类型的未初始化局部变量将产生未定义的值. 3.局部静态对象在程序执行路径第一次进过对象定义语句时初始化,并且直到程序终止才被销毁. 内置 ...
- HashMap实现原理(JDK1.8)
概述HashMap在底层数据结构上采用了数组+链表+红黑树,通过散列映射来存储键值对数据因为在查询上使用散列码(通过键生成一个数字作为数组下标,这个数字就是hash code)所以在查询上的访问速度比 ...
- C++ primer plus读书笔记——第13章 类继承
第13章 类继承 1. 如果购买厂商的C库,除非厂商提供库函数的源代码,否则您将无法根据自己的需求,对函数进行扩展或修改.但如果是类库,只要其提供了类方法的头文件和编译后的代码,仍可以使用库中的类派生 ...
- 二叉树——Java实现
1 package struct; 2 3 interface Tree{ 4 //插入元素 5 void insert(int value); 6 //中序遍历 7 void inOrder(); ...
随机推荐
- 渗透测试实例Windows XP SP2
一.msf> use exploit/windows/dcerpc/ms03_026_dcom.看到命令提示符的改变表明该命令已经运行成功. 二.为漏洞利用代码设置必要的参数,show opti ...
- RHadoop教程翻译系列 _Mapreduce(1)_第一个Mapreduce任务
如果单从概念上来说,Mapreduce和R中的函数lapply, tapply并无差别,它们都是把元素转化成列,然后计算索引(Mapreduce中的键),最后合并成一个定义好的组合.首先,让我们看一个 ...
- SpringMVC + Spring + MyBatis 学习笔记:提交数据遭遇基础类型和日期类型报400错误解决方法
系统:WIN8.1 数据库:Oracle 11GR2 开发工具:MyEclipse 8.6 框架:Spring3.2.9.SpringMVC3.2.9.MyBatis3.2.8 使用SpringMVC ...
- linux 条件变量
互斥量就是一把锁,在访问数据时能保证同一时间内只有一个线程访问数据,在访问完以后再释放互斥量上的锁. 条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待"条 ...
- TopFreeTheme精选免费模板【20130703】
今天我们给大家分享13个最新的主题模板,5款WordPress主题,5款Joomla模板,3款OpenCart主题. BowThemes – BT Folio v1.0 Template for Jo ...
- Python 读取文件下所有内容、获取文件名、截取字符、写回文件
# coding=gbk import os import os.path #读取目录下的所有文件,包括嵌套的文件夹 def GetFileList(dir, fileList): newDir ...
- HDU2648:Shopping(DKBR_hash)
题目链接 题意: 给出n个字符串,接下来m天,每天每个字符串要增加对应的值,询问“memory”每天的排名 分析: 用hash表hash出每个字符串对应得值,然后放入二维数组(防止地址冲突),m天,输 ...
- [Cocos2d-JS] 安卓机器的几个按钮
cc.eventManager.addListener({ event:cc.EventListener.KEYBOARD, onKeyPressed:function(keycode,event){ ...
- dom 动态生产表格
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- Codeforces Round #368 (Div. 2) C. Pythagorean Triples(数学)
Pythagorean Triples 题目链接: http://codeforces.com/contest/707/problem/C Description Katya studies in a ...