OC学习笔记--基础篇

本文简要介绍了一些oc的基础类型,包括数组、字典、字符串、消息传递、类、对象、方法、属性、协议和转发,希望对你有帮助。

OC数据类型

在这里插入图片描述

打印—类似print

NSlog(@"hello word");

数组

NSMutableArray (可变数组)和 NSArray

NSArray *names = [[NSArray alloc] initWithObjects:@"frank", @"duck", @"monkey", nil];
NSArray *names = [NSArray arrayWithObjects:@"frank", @"duck", @"monkey", nil];
NSArray *names = @[@"frank", @"duck", @"monkey", @"cow"]

字典

NSMutableDictionary(可变字典)和NSDictionary

NSMutableDictionary *aMutableDictionary = [[NSMutableArray alloc]init];
NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:[self.dataMgr.preInvoiceModel toDictionary]];

消息传递

//其实就是调用方法
[obj method: argument];
//c++
obj.method(argument);

声明字符串

NSString* myString = @"My String\n";

封装

声明类

以关键字@interface作为开始,@end作为结束

@interface MyObject : NSObject {int memberVar1; // 实体变量id  memberVar2;
}+(return_type) class_method; // 类方法-(return_type) instance_method1; // 实例方法
-(return_type) instance_method2: (int) p1;
-(return_type) instance_method3: (int) p1 andPar: (int) p2;
@end

+/- 号代表函数类型:

“+” 代表类方法,不需要实例就可以调用,与C++ 的静态函数相似,这类方法是可以直接用类名来调用的

“-” 是一般的实例方法,必须使用这个类的实例才可以调用它

- (void) setColorToRed: (float)red Green: (float)green Blue:(float)blue; /* 宣告方法*/
[myColor setColorToRed: 1.0 Green: 0.8 Blue: 0.2]; /* 呼叫方法*/

声明区域

implementation

@implementation MyObject {int memberVar3; //私有
}
+(return_type) class_method {.... //method implementation
}
-(return_type) instance_method1 {....
}
-(return_type) instance_method3: (int) p1 andPar: (int) p2 {....
}
@end

与Interface区别——访问权限:(看不懂可以看下图,清楚明白)

Interface区块内的实体变量默认权限为protected,implementation 区块的实体变量则默认为private。

在Implementation区块定义私有成员更匹配面向对象之封装原则,因为如此类别之私有信息就不需曝露于公开interface(.h文件)中。

封装权限:

  • @private(当前类访问权限):成员变量只能在当前类的内部访问。在类的实现部分定义的成员变量默认是@private。

  • @package(相同映像访问权限):如果类中的成员变量用@package访问控制符来限制,则这个成员变量可以在当前类以及当前类的同一个映像的任意地方访问

    所谓的统一映像指的是编译后生成的同一个框架或同一个执行文件,编译器可以将一些类编译成一个框架库,那么这个库中的类之间可以互相直接访问@package修饰的成员变量。

  • @protected(子类访问权限):如果类中的成员变量用@protected访问控制符来限制,则这个成员变量可以在当前类、当前类的子类的任意地方访问。在类的接口部分定义的成员变量默认是@protected

  • @public(公共访问权限):如果类中的成员变量用@public访问控制符来限制,则这个成员变量可以在任何地方进行访问

在这里插入图片描述

interface:声明类,implementation:定义类

创建对象

alloc:分配内存,init:初始化,若要自己定义初始化,可重写init方法(类似构造函数

MyObject * my = [[MyObject alloc] init];
//若创建对象不需要参数,则可直接使用new
MyObject * my = [MyObject new];

方法

方法声明:上面提过,主要是用加号和减号表示类方法和实例方法,后面跟着参数

方法调用:主要就是“[ ]”,[]之间可以嵌套

属性

基本的定义使用关键字@property编译选项,紧跟着类型信息和属性的名字

@property (nonatomic, strong) NSMutableArray *items;

不多说,直接看这篇博客:Objective-C属性(property)的特性(attribute)-腾讯云开发者社区-腾讯云

属性的特性:(经典永流传的图)

在这里插入图片描述

1.原子性(Atomicity

atomic(默认值)

nonatomic

  1. 存取特性(Access

readwrite(默认值)–读写

readonly–只读

3.内存管理特性(Storage

管理对象生命周期

strongweakassigncopy深拷贝

协议

@protocol作为区块起始,@end结束,中间为方法列表

@protocol Locking
- (void)lock;
- (void)unlock;
@end

注:类遵守协议的写法与swift也不一样

@interface SomeClass : SomeSuperClass <Locking>
@end

转发

Objective-C 入门教程 | 菜鸟教程

闭包

因为闭包可能会导致循环引用,所以一般用weak弱引用(之前一直都基于知道这个点的层面,今天真的是看到了这方面代码一下子结合起来了)

我们知道死锁就是两个进程或线程之间互相持有对方资源,且不释放,所以就会导致死锁

循环引用比较相似,我们一般使用weak弱引用对self进行引用,避免引用计数+1导致循环饮用
在这里插入图片描述

代码例子如下

iOS-Block 中 为何使用 weakSelf 和 strongSelf - 掘金

闭包的简单使用:

myBlock = ^(int a, int b)
{//coding
};

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

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

相关文章

PL/SQL Developer中文版下载以及使用图解(绿色版)

下载地址&#xff1a;http://pan.baidu.com/s/1eQCTmkM 1、运行plsqldev.exe程序&#xff1b; 2、设置Oracle主目录名/OCI库地址&#xff0c;如图&#xff1a; 重新启动程序。 3、配置登陆信息&#xff0c;连接数据库&#xff0c;如图&#xff1a;

实例应用 自定义页面taglib标签

关于继承TagSupport与BodyTagSupport的区别说明 * <code>TagSupport</code>与<code>BodyTagSupport</code>的区别主要是标签处理类是否需要与标签体交互。 * 如果不需要交互的就用<code>TagSupport</code>&#xff0c;如果需要交互就用<…

Express框架使用以及数据库公共操作类整理(Win7下的NodeJs)

具体步骤&#xff1a; 1、安装开发工具WebStorm&#xff1b; 2、安装node/npm&#xff08;下载地址&#xff1a;https://nodejs.org/download/&#xff09;选择适合你的xxx.mis安装&#xff1b; 3、安装express框架(cmd窗口模式&#xff0c;用npm命令执行&#xff1a;npm in…

SimpleITK使用深度学习识别肺癌CT DICOM数据集

肺癌数据集DICOM &#xff1a;https://wiki.cancerimagingarchive.net/display/Public/LIDC-IDRI 首先用SimpleITK把mhd图片读入&#xff0c;对每个切片使用Gaussian filter然后使用阈值-600把肺部图片二值化&#xff0c;然后再分析该切片的面积&#xff0c;去掉面积小于30mm2的…

MemCache在win7上的可视化配置以及Nodejs/Net应用

惯例科普&#xff1a;MemCache是一套分布式的高速缓存系统&#xff0c;由LiveJournal的Brad Fitzpatrick开发&#xff0c;但目前被许多网站使用以提升网站的访问速度&#xff0c;尤其对于一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。这是一套开放源代码软件…

Redis在win7上的可视化应用

Redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash&#xff08;哈希类型&#xff09;。这些数据类型都支持push/pop、add/remove及取交集并…

全网最详细的docker配置nginx http2 优化高速访问

Nginx 从 1.13.9 版本开始加入了 HTTP/2 的 Server Push 功能&#xff0c;本文将介绍如何在 Nginx 下实现 HTTP/2 服务器推送 (Server Push) 。这里我们首先用 Docker 搭建一个支持 HTTP/2 的 Server Push 功能的 Nginx 容器并加入 SSL 证书。如果你还不会 Docker&#xff0c;可…

CentOS安装运行NodeJS框架Express

安装依赖包 yum -y install gcc make gcc-c openssl-devel wget 下载/解压NodeJs wget http://nodejs.org/dist/v0.12.7/node-v0.12.7.tar.gztar -zvxf node-v0.12.7.tar.gz 编译及安装&#xff0c;逐行执行 cd node-v0.12.7./configuremake install 验证是否安装配置成功&…

android点滴27:R文件无法加载 R cannot be resolved to a v...

2019独角兽企业重金招聘Python工程师标准>>> 导致这个问题原因可能有二个&#xff1a;1. manifest文件中的包名和真正的报名不统一 2. 在java文件中导入了R文件&#xff0c;在java文件中无需导入任何包的R文件&#xff0c;系统会自动加载gen目录下的R文件。 转载于…

MITK医学Python开发入门详细版

1.关于MITK&#xff1a; MITK的全称是”The Medical Imaging Interaction Toolkit”。它是一款开源的交互式医学图像处理软件开发和应用平台。MITK将ITK和VTK整合为一个应用框架。该软件由德国一个研究室开发。官网地址为&#xff1a;http://mitk.org/wiki/MITK 。 与MITK同名…

服务器系统上1068错误,错误1068,详细教您启动网络服务错误1068怎么解决

在电脑中&#xff0c;通常开机后就会自动连接网络宽带&#xff0c;不过有用户遇到问题。开机后网络图标显示红叉或者图标正常无法上网&#xff0c;打开网络和共享中心才发现是服务或者组无法启动&#xff0c;启动时显示错误1068&#xff0c;这该怎么办&#xff1f;下面&#xf…

NodeJs连接Oracle数据库

nodejs连接oracle数据库&#xff0c;各个平台的官方详情文档&#xff1a;https://github.com/oracle/node-oracledb/blob/master/INSTALL.md 我的nodejs连接Oracle的配置&#xff0c;运行环境: windows7 x64 nodejs 0.12.7 Python 2.7.10 npm 2.11.3 运行原理分析 npm调…

maven实现多模块热部署

2019独角兽企业重金招聘Python工程师标准>>> 一、背景 基于maven的项目工程都会按模块划分&#xff0c;每个模块最终形成一个jar包&#xff0c;那么每次对模块的修改就需要重新打包&#xff0c;这样的工作重复而繁琐&#xff0c;以前的热部署解决方案都是只针对web…

鲲鹏服务器php性能,对鲲鹏服务器的内存进行性能优化后的前后数据对比

测试的鲲鹏服务器是96核2numa节点&#xff0c;内存测试用的是Imbench里面的stream。优化说明&#xff0c;bios和绑核优化后性能提升明显&#xff0c;编译参数优化后性能提升不明显可以根据情况是否进行编译优化1、Bios修改:进入bios&#xff0c;在Advanced中进入Memory Config界…

手机投屏时电视显示服务器有问题,小屏变大屏,手机投屏这几招你学废了么?...

马上七夕了&#xff0c;又恰逢周末不想去电影院凑热闹的人可以在家看电影、追剧但是小屏看剧一点也不爽何不投放到电视上饱览大视野呢我们可以借助“投屏”功能痛痛快快在电视上观看想看的剧集和电影那么如何通过手机&#xff0c;将内容传送到智能电视上呢那么接下来为大家介绍…

分类算法之决策树介绍

实习了一段时间&#xff0c;接触了一些数据挖掘、机器学习的算法&#xff0c;先记录下来方便以后的复习回顾&#xff1a; 一&#xff1a;决策树概念 决策树可以看做一个树状预测模型&#xff0c;它是由节点和有向边组成的层次结构。树中包含3中节点&#xff1a;根节点、内部节点…

C#调用Couchbase中的Memcached缓存

安装服务端 服务端下载地址&#xff1a;http://www.couchbase.com/download 选择适合自己的进行下载安装就可以了,我这里选择的是Win7 64。 服务端安装完后&#xff0c;如果成功了&#xff0c;那么在浏览器中可以看到。如果没有那么需要手动进行访问http://localhost:8091/ind…

Windows10安装Anaconda和Pytorch(CPU版,无GPU加速)

1.Anaconda安装 Anaconda的安装网上的教程非常非常多&#xff0c;很简单&#xff0c;下面这篇博客写的很详细&#xff0c;看我写的也可以。 地址&#xff1a;https://blog.csdn.net/u014546828/article/details/80334448 注意&#xff1a;不建议从 官网下载&#xff0c;官网…

云计算的发展及应用--演讲用PPT

最近在几个客户处进行了关于云计算的普及培训。主要是让用户了解什么是云计算&#xff0c;云计算的框架以及对我们的影响。我将自己手中的几本相关资料&#xff0c;结合自己的经验和理解&#xff0c;整合成了一篇演示用的PPT。 虽然演示用的PPT简洁些&#xff0c;但用来理解一下…

nodejs Error: request entity too large解决方案

错误如图&#xff1a; 解决方案&#xff1a; app.js添加 var bodyParser require(body-parser);app.use(bodyParser.json({limit: 50mb}));app.use(bodyParser.urlencoded({limit: 50mb, extended: true}));