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,一经查实,立即删除!

相关文章

linux gcc编译下的文件读写操作

linux下的文件操作 所有目录 1.文件及文件系统的定义 2.linux文件的类型 3.linux文件的权限 4.文件操作 4.1 文件的创建 4.2 文件的打开及关闭 4.3 文件的读写操…

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;如果需要交互就用<…

魔兽世界怀旧服聊天服务器中断,魔兽世界怀旧服世界服务器无法连接

本文导航第1页&#xff1a; 服务器无法连接解决方法服务器无法连接解决方法今天是魔兽世界怀旧服的公测时间&#xff0c;服务器已经爆了&#xff0c;很多玩家都在反应游戏服务器进不去&#xff0c;或者服务器断开连接等等问题&#xff0c;针对这些情况&#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的…

两个文件夹数据同步

echooffechoechoAuthorlongwenby2013echo每天下午16&#xff1a;00和晚上22&#xff1a;00做自动更新echo时间由您的计划任务时间确定echoRelationlongwen260qq.comechoQQ476376997echoTel13480986813echoxcopyD:\svn\te\*.*E:\svn\te\*.*/s/e/m/y转载于:https://blog.51cto.co…

如何让nodejs同步操作

众所周知&#xff0c;异步是nodejs中得天独厚的特点和优势&#xff0c;但同时在程序中同步的需求&#xff08;比如控制程序的执行顺序为&#xff1a;func1 -> func2 ->func3 &#xff09;也是很常见的。本文就是对这个问题记录自己的一些想法。 需要执行的函数&#xff…

Mediapipe框架学习之一——Win10安装Mediapipe环境

Mediapipe官方文档 Mediapipe框架学习之一——Win10安装Mediapipe环境 Mediapipe框架学习之二——Android SDK and NDK 配置 Mediapipe框架学习之三——构建 MediaPipe 的 Android aar 包 Mediapipe框架学习之四——利用 Mediapipe aar 包&#xff0c;在AS中构建基于 Media…

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

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

Android AM命令行启动程序的方法

http://blog.csdn.net/sunrock/article/details/5675067 在前面添加一句 启动服务的话 使用 am startservice com.lxb.window/.RecordService即可在Android中&#xff0c;除了从界面上启动程序之外&#xff0c;还可以从命令行启动程序&#xff0c;使用的是命令行工具am.usage: …

Apache httpd 配置HTTPS SSL访问 443

2, 首先安装https模块yum install mod_ssl 3. 配置Apache Web服务器 首先&#xff0c;修改下面的配置文件。仅需配置红色部分 SSLCertificateFile 和 SSLCertificateKeyFile # vim /etc/httpd/conf.d/ssl.conf # # When we also provide SSL we have to listen to the # t…

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;可…

Flex Graphics

<?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.adobe.com/mxml/2009" xmlns:s"library://ns.adobe.com/flex/spark" xmlns:mx"library://ns.adobe.com/flex/halo"minWidth"1024…

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同名…

ubuntu配置×××后,配置走×××的路线

先执行route命令查看所有的路由route看到的结果大致如下内核 IP 路由表 目标 网关 子网掩码 标志 跃点 引用 使用 接口 default 192.168.8.1 0.0.0.0 UG 0 0 0 wlan0 110.185.76.107 192.168.8.1 25…

Python SimpleITK实现医学图像增强算法

1、对数变换 图像对数变换首先将图像从SimpleITK图像数据转成Numpy矩阵数据&#xff0c;然后采用Numpy的log1p&#xff08;&#xff09;函数来计算数据的log&#xff08;1x&#xff09;变换&#xff0c;由于1x不能小于零&#xff0c;因此这里我们使用图像减去图像的最小值来计…