从零开始:iOS(三)

整理一些Objective-c相关知识.

c#与objective-c对照着看,一步一步来.重点在oc上.

1:新建类.

/*C#*/public class Person{private string name;public string GetName(){return name;}public void SetName(string value){name = value;}public static void SayHello(){ /*print hello*/}}
/*o-c*//*.h*/
#import <Foundation/Foundation.h>
@interface Person : NSObject {@private NSString *name;  
}-(NSString *) getName;-(void) setName:(NSString *) value;+(void) sayHello;
@end/*.m*/
#import "Person.h"@implementation Person
-(NSString *) getName{return name;
}
-(void) setName:(NSString *) value{if(name != value){[name release];name = [value retain];}
}
+(void) sayHello{NSLog(@"Hello");
}
@end

 

{...}即是成员变量,也可以使用@private @public @protected来指定访问级别. 如果不加,默认是protect.方法默认就是public,你在xcode里也@不出来访问修释符.

- 方法前加减号,表示这个方法是对象方法, + 方法前加加号,表示这个方法是类方法, c#同学可以感受下.

2:Two Stage Creation 两段构造模式.

/*C#*/
Person p = new Person(); //创建一个实例
/*oc*/
Person *p = [[Person alloc] init]

oc在构建对象的时候采用的是两段构造. 先调用了(+) alloc方法, 再调用(-) init方法 alloc分配内存空间,init负责初始化值. 再另写一个 对比下.那就秒懂了,其实就这点事.理解很容易.

/*C#  添加构造函数*/
public Person() {}
public Person(string name)
{
this.name = name;
}
/*C# 构建对象*/ Person p = new Person("New Name");
/*oc 这里只写出 .m的实现,*/
-(id) initWithName:(NSString *)value{self = [super init];if(self){[name release];name = [value retain];}  return self;
}/*oc 构建对象*/
Person p = [[Person alloc] initWithName:@"New Name"];

-(id) 表示返回的是一个指针(不习惯就叫对象吧),self等同于 c#里的 this.

init没啥好说的,深入alloc一点吧.

这里引用http://blog.devtang.com/blog/2013/01/13/two-stage-creation-on-cocoa/该blog的一段文字.

当我们通过alloc或allocWithZone方法创建对象时,cocoa会返回一个未”初使化“过的对象。在这个过程中,cocoa除了上面提到的申请了一块足够大的内存外,还做了以下3件事:

  1. 将该新对象的引用计数(Retain Count)设置成1。
  2. 将该新对象的isa成员变量指向它的类对象。
  3. 将该新对象的所有其它成员变量的值设置成零。(根据成员变量类型,零有可能是指nil或Nil或0.0)

我再贴一段 NSObject.m 里关于 alloc和allocWithZone的实现

+ (id) alloc
{return [self allocWithZone: NSDefaultMallocZone()];
}
+ (id) allocWithZone: (NSZone*)z
{return NSAllocateObject (self, 0, z);
}/*通过allocWithZone :类方法调用NSAllocateObject 函数分配了对象*/struct obj_layout {NSUInteger retained;
};
inline id
NSAllocateObject (Class aClass, NSUInteger extraBytes, NSZone *zone)
{int size = 计算容纳对象所需内存大小;id new = NSZoneMalloc(zone,size);memset(new, 0, size);new = (id)&((struct obj_layout *)new)[1];
}
/*NSAllocateObject 函数通过调用NSZoneMalloc 函数来分配存放对象所需的内存空间,之后将该内存空间置0,最后返回作为对象而使用的指针。*/

http://book.2cto.com/201305/23851.html 这里是我在网上寻的文章,详细解释了,它在内部是如何执行那三件事的.

关于 new  , new 等同于 alloc init 双段构造,唯一缺点就是不能使用带参的构造, 如果new之后调用 initWithName 会出错,所以还是遵循官方约定的,使用双段构造.先写到这.

 

转载于:https://www.cnblogs.com/igqtdh/p/3257590.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚类算法学习

聚类是一种非监督学习方法 在一个典型的监督学习中,我们有一个有标签的训练集,我们的目标是找到能够区分正 样本和负样本的决策边界,在这里的监督学习中,我们有一系列标签,我们需要据此拟合一 个假设函数。与此不同的是,在非监督学习中,我们的数据没有附带任何标签,我们拿到…

斯坦福大学:极限工况下的无人驾驶路径跟踪|厚势汽车

来源&#xff1a; 同济智能汽车研究所责任编辑&#xff1a;啜小雪文章译自 2017 年美国控制年会的会议论文原标题&#xff1a;Path-Tracking for Autonomous Vehicles at the Limit of Friction原作者&#xff1a;Vincent A. Laurense, Jonathan Y. Gohand J. Christian Gerdes…

SQLite DBHelp

c#连接SQLite SQLite这个精巧的小数据库&#xff0c;无需安装软件&#xff0c;只需要一个System.Data.SQLite.DLL文件即可操作SQLite数据库。SQLite是一个开源数据库&#xff0c;现在已变得越来越流行&#xff0c;它的体积很小&#xff0c;被广泛应用于各种不同类型的应用中。S…

手写数字识别实现

本文主要实现手写数字识别&#xff0c;利用多类逻辑回归与神经网络两种方法实现 Multi-class Classification 数据源 There are 5000 training examples in ex3data1.mat, where each training example is a 20 pixel by 20 pixel grayscale image of the digit. Each pixe…

Science:若DTC基因检测达2%成年人群,几乎所有人的身份或将无所遁形

来源&#xff1a;测序中国摘要&#xff1a;直接面向消费者&#xff08;DTC&#xff09;的基因检测不仅仅是有趣那么简单&#xff0c;它的有用性随着样本数据库的积累&#xff0c;会逐渐显露出来。消费级基因检测&#xff0c;即直接面向消费者&#xff08;DTC&#xff09;的基因…

QT 获取屏幕尺寸的法子

#include "QDesktopWidget" QDesktopWidget* desktopWidget QApplication::desktop(); QRect deskRect desktopWidget->availableGeometry(); //可用区域 QRect screenRect desktopWidget->screenGeometry(); //屏幕区域 int w screenRect.width(); int …

降维算法学习

降维的动机 首先,让我们谈论降维是什么。作为一种生动的例子,我们收集的数据集,有许多, 许多特征,我绘制两个在这里。 假设我们未知两个的特征 x1:长度:用厘米表示;X2,是用英寸表示同一物体的长度。 所以,这给了我们高度冗余表示,也许不是两个分开的特征 x1 和 X2,这两个…

年龄大了学Java是爱好还是转型?

年龄大了学Java是爱好还是转型&#xff1f; 一、前言 35岁&#xff0c;好像年龄也不小了&#xff0c;工作也有十年多了&#xff0c;一直搞编程&#xff0c;也已经做过几年研发管理。较多使用的是Delphi语言&#xff0c;对这门语言曾经一度的情有独钟。那是我十年前的一…

人类为什么更聪明 | 人脑神经元关键结构差异被揭示

来源&#xff1a;DeepTech深科技人脑中&#xff0c;数以千计的神经元间电信号交替传送不断&#xff0c;而长短不一的树突&#xff08;神经元胞体延伸&#xff09;在神经元信息整合中起到了关键作用&#xff0c;由此我们的大脑细胞才能正常反应运作。而这次&#xff0c;MIT 的神…

机器学习之异常检测

问题的动机 什么是异常检测呢?为了解释这个概念,让我举一个例子吧: 假想你是一个飞机引擎制造商,当你生产的飞机引擎从生产线上流出时,你需要进行 QA (质量控制测试),而作为这个测试的一部分,你测量了飞机引擎的一些特征变量,比如引擎 运转时产生的热量,或者引擎的振动等等。…

美国《科技与未来城市报告》对中国智慧城市建设的启示

作者&#xff1a;王波、甄峰、卢佩莹来源&#xff1a;科技导报在全球范围内&#xff0c;美国一直引领信息通信技术等科技领域的发展。2008 年全球金融危机后&#xff0c;美国IBM 公司在《智慧地球&#xff1a;下一代领导人议程》主题报告中首次提出“智慧地球”理念&#xff0c…

SVM实现邮件分类

首先学习一下svm分类的使用。 主要有以下步骤&#xff1a; Loading and Visualizing DatajTraining Linear SVM Implementing Gaussian KernelTraining SVM with RBF Kernel 选择最优的C, sigma参数 画出边界线 线性keneral实现 C 1; model svmTrain(X, y, C, linear…

机器学习之推荐系统

我们从一个例子开始定义推荐系统的问题。 假使我们是一个电影供应商,我们有 5 部电影和 4 个用户,我们要求用户为电影打分。 基于内容的推荐系统 在一个基于内容的推荐系统算法中,我们假设对于我们希望推荐的东西有一些数据,这 些数据是有关这些东西的特征。 在我们的例子…

低潮过后,未来医疗可穿戴市场将如何发展?

来源&#xff1a;资本实验室在过去几年中&#xff0c;以智能手表为代表的可穿戴设备市场从快速爆发&#xff0c;并吸引全球厂商趋之若鹜&#xff1b;到如今平缓发展&#xff0c;众多厂商黯然离场&#xff0c;经历了一轮过山车般的炒作周期。但可穿戴设备市场难道只是看上去很美…

js控制文本框中的字符数

function checkLength(which,remainderNum,maxChars) {if (which.value.length > maxChars)which.value which.value.substring(0,maxChars);var curr maxChars - which.value.length;document.getElementById(remainderNum).innerHTML curr.toString(); } 转载于:https:…

大规模机器学习

如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更好的结果。我们应 该怎样应对一个有 100 万条记录的训练集? 以线性回归模型为例,每一次梯度下降迭代,我们都需要计算训练集的误差的平方和, 如果我们的学习算法需要有 20 次迭代,这便已经是非常大的计算代价。 …

中国半导体:存储器能否打破海外垄断?

来源&#xff1a;中金公司摘要&#xff1a;根据WSTS的统计&#xff0c;全球存储器行业营收2017年达到1319亿美元&#xff0c;占半导体行业收入的30.1%&#xff0c;过去五年(2012-2017)年复合增长率高达37%。▌全球市场概览:千亿美金市场&#xff0c;寡头竞争&#xff0c;IDM模式…

hdu 4588 Count The Carries

思路&#xff1a;容易发现二进制表示的数的最低位规律是01010101……&#xff1b;接着是001100110011……&#xff1b;接着是&#xff1a;0000111100001111…… 这样我们发现每一位的循环节是2^(i1)&#xff0c;前2^i是0&#xff0c;后面的是1.这样就可以算出每一位1出现的次数…

数字图像处理入门

图像是指能在人的视觉系统中产生视觉印象的客观对象&#xff0c;包括自然景物、拍摄到的图片、用数学方法描述的图形.图像的要素有儿何要素〈刻画对象的轮廓、 形状等〉和非几何要素&#xff08;刻画对象的颜色、 材质等〉。 什么是数字图像 简单地说&#xff0c; 数字图像就…

马化腾六年后知乎再提问:未来十年哪些基础科学突破会影响互联网科技产业?...

来源&#xff1a;量子位“未来十年哪些基础科学突破会影响互联网科技产业&#xff1f;产业互联网和消费互联网融合创新&#xff0c;会带来哪些改变&#xff1f;”昨天午夜时分&#xff0c;一个新问题出现在知乎。略微不同之处在于&#xff0c;这个问题的提出者ID是ponyma&#…