Object-c基础(2)

类和对象

在Object-c中类,其接口(interface)和实现(implementation)是分离开来的

  • 类的声明

      @interface 类名:父类名{实例变量的定义;}方法声明;...@end
  • 类的实现

      @implementation 类名方法定义...@end
对象

一个类提供对象的图纸,然后创建这个类的对象

    类名 对象名=[[类名 alloc]init];

访问一个类的对象的属性可以直接使用访问成员运算符(.)

属性和变量

属性

属性(property)指在接口文件中声明实例对象到底有哪些属性

属性声明的一些规则总结如下:

  • 自动生成访问方法
  • 自动生成实例变量
  • 更简单地调用访问方法(使用点操作符(.)完成)
  • 属性的内省(introspection):通过内省可以动态地查询类中声明的属性以及属性的名称和类型
显示声明属性

让编译器自动生成与数据成员同名的方法

    @property int hitPoint;

相当于自动声明了实例变量和读写方法,方便外部使用

属性的实现

使用@synthesize,让编译器自动生成setter和getter方法

    @synthesize hitPoint;

synthesize还有一个作用就是可以指定与属性对应的实例变量,例如@synthesize myButton = xxx;那么self.myButton其实是操作的实例变量xxx,而不是_myButton了。

属性指定的选项

@property 可用的选项

  • 指定方法名(显式指定getter和setter方法名)
    • getter=getter 方法名
    • setter=setter 方法名
  • 读写属性
    • readonly(只读)
    • readwrite(读写)
  • 赋值时的选项
    • assign(单纯赋值)
    • retain(进行保持操作)
    • unsafe_unretained(同assign一样(用于ARC))
    • strong(同retain一样(用于ARC))
    • weak(弱引用(用于ARC))
    • copy(复制对象)
  • 原子性操作
    • nonatomic(非原子性操作、非线程安全)
属性赋值时的选项

我们可以为可读写的@property设置选项,选项共有6种:assign,retain,unsafe_unretained,strong,weak和copy。选项之间是排他关系,可以不设置任何选项或只设置6种种的一种。根据所修饰的属性是否是对象类型或者所采用的内存管理方式(手动计数,ARC)的不同,选项的意义也不同。

如表所示:

基础数据类型手动引用计数ARC
未指定任何选项直接赋值警告警告
assign
unsafe_unretained
直接赋值直接赋值直接赋值
retain
strong
出错赋值并对新值进行retain操作赋值并对新值进行retain操作
weak出错无特别操作和assign相同弱引用
copy出错赋值时建立传入值的一份副本赋值时建立传入值的一份副本

转载于:https://www.cnblogs.com/evansyang/p/5248760.html

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

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

相关文章

arm linux 下移植busybox 的tftp

(1)进入busybox目录,make menuconfig ,然后在networking中勾选tftp项跟tftpd项。 (2)配置/etc/inetd.conf 中关于tftp的选项(此部未验证,不需要应该也可以) tftp dgra…

靶场练习第二十天~vulnhub靶场之Funbox: Scriptkiddie

一、环境搭建 靶官网机下载地址:Funbox: Scriptkiddie ~ VulnHub 百度云盘下载链接: 百度网盘 请输入提取码 提取码: i4a9 二、信息收集 1.nmap命令扫描靶机 先用ifconfig查看kali的IP,因为kali和靶机都是NAT模式下,所以用 nmap 192.168…

documentbodyscrollTop的值总为零的解决办法

有一个功能需要判断返回顶部按钮是否显示。 JS代码如下: var sTop document.body.scrollTop;if(sTop>100){document.getElementById("sm_top").style.display"block";}else{document.getElementById("sm_top").style.display&quo…

spring mvc 多线程并发

ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。 http://www.xuebuyuan.com/1628190.html 我们知道Spring通过各种DAO模板类降低了开发者使用各种数据持久技术的难度。这些模板类都是线程安全的,也就…

靶场练习第十九天~vulnhub靶场之GreenOptic: 1

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:GreenOptic: 1 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机开…

靶场练习第二十五天~vulnhub靶场之Raven-2

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:Raven: 2 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机开放的…

每天一个linux命令(46):vmstat命令

vmstat是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、CPU活动进行监控。他是对系统的整体情况进行统计,不足之处是无法对某个进程进行深入分析。vmstat 工具提供了一种低开销的系统性能观察方…

用TypeScript开发了一个网页游戏引擎,开放源代码

最开始学习电脑编程的原动力之一就是想自己编写游戏,一方面很好奇这些游戏是怎么做出来的,另一方面觉得有些地方设计的不合理,希望电脑游戏既能让人玩的有趣,又不浪费时间。 学校五年,毕业十年,学用了十多种…

靶场练习第二十一天~vulnhub靶场之Momentum-1

一、环境搭建 1.ifconfig查看kali的ip 2.创建靶机 靶机下载地址:Momentum: 1 ~ VulnHub 二、信息收集 1.nmap命令 寻找靶机ip:nmap 192.168.101.0/24 2.端口扫描 使用命令:nmap -A -T4 -p 1-65535 192.168.101.113,发现开放2…

为集合排序的三个方法

// 为集合字符串排序(cmpare:) // - null :空类型 就是字符型的0; // - [NSNull null]是对象类型,能够存入集合的数据:为其分配了内存,但其中的值为空(不能被排序否则程序会崩溃&am…

C#ArrayList对象集合

ArrayList alist new ArrayList();//集合对像 长度可以改变,类型不限//添加单个元素可以Add()alist.Add("在在的");alist.Add(35);alist.Add(3.14);alist.Add(c);alist.Add(5000m);//如果用Add()添加数组或集合最好用 alist.AddRange()alist.AddRange(…

靶场练习第二十二天~vulnhub靶场之Momentum-2

一、准备工作 靶机下载地址:Momentum: 2 ~ VulnHub 1.查看kali的ip 使用命令ifconfig 2.使用nmap命令 nmap 192.168.101.0/24 查看开放的端口和协议:nmap -sV 192.168.101.114 二、信息收集 1.使用gobuster,寻找隐藏的网站 gobuster di…

索引深入浅出(8/10):覆盖索引或列包含

在索引深入浅出:非聚集索引的B树结构在聚集表里,在聚集表里,我们看到非聚集索引的叶子层只包含非聚集索引键和聚集索引键。从聚集表结构或堆表结构里拿到剩下列,SQL Server需要进行书签/键查找操作。很多情况下书签或键查找非常消…

靶场练习第二十三天~vulnhub靶场之GOATSELINUX: 1

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:GoatseLinux: 1 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机…

Spring事务报Connection is read-only

昨天做项目时,写了个方法,程序突然报了Connection is readonly. Queries leading to data modification are not allowed调了程序半天,最后才发现是自己在spring配置文件中增加了事务.把方法写成了大写开头了,但是spring配置是以小写开头 代码…

HTTP协议具体解释

HTTP是一个属于应用层的面向对象的协议。因为其简捷、高速的方式。适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完好和扩展。眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中&#x…

靶场练习第二十四天~vulnhub靶场之Raven-1

一、准备工作 kali和靶机都选择NAT模式(kali与靶机同网段) 1.靶场环境 下载链接:Raven: 1 ~ VulnHub 2.kali的ip 命令:ifconfig 3.靶机的ip 扫描靶机ip sudo arp-scan -l 二、信息收集 1.nmap的信息收集 (1)扫描靶机开放的…

【知识积累】DES算法之C#加密Java解密

一、前言 在项目需要添加安全模块,客户端调用服务端发布的service必须要经过验证,加密算法采用DES,客户端采用C#进行加密,服务端使用Java进行解密。废话不多说,直接上代码。 二、客户端 客户端采用C#进行开发&#xff…

Space.js – HTML 驱动的页面 3D 滚动效果

为了让我们的信息能够有效地沟通,我们需要创建用户和我们的媒体之间的强有力的联系。今天我们就来探讨在网络上呈现故事的新方法,并为此创造了一个开源和免费使用的 JavaScript 库称为 space.js。该库是 HTML 驱动的,这意味着你不需要在网站上…

离职感言-Symbio的5年工作回顾和总结(转载)

离职感言-Symbio的5年工作回顾和总结 (2011-06-02 21:06:30) 转载▼2005年底,当时我在西安过的还不错,结了婚,买了房,在公司也受老板器重,但是初为人父,孩子带给我的那种人生紧迫感:“再不趁还…