Objective-C 快速入门--基础(一)
1、实例变量的可见度有哪些?对访问变量有什么影响?

所谓的内部,指的是相应类的@implementation和@end之间
示例:
@interface Person : NSObject
{
@public
NSString *_hobby; //兴趣!
@protected
NSString *_name; //姓名
int _age; //年龄!
@private
NSString *_sex; //性别
}
2、如果对于一个类Person来说,类中的实例变量_name,可见度设为受保护的.那我如何在本类及其子类以外的地方给_name赋值和取值呢?
使用setter和getter方法,示例:
.h中:

.m中:

main.m中:

控制台输出:

3、OC中方法的类型有哪些?每种类型的方法各有什么特点?
OC中的方法有两种:①类方法②实例方法
① 类方法:只能类使用,例如:+(id)alloc ;注意:类方法中不能使用实例变量;
② 实例方法:只能对对象使用,例如:-(void)sayHi;
4、什么时候使用类方法?类方法和实例方法的优缺点是什么?
①类方法(+)应该是对整个模型层面的操作;②实例方法(-)是对某单个模型的操作。
例如:有一个朋友圈类,发布朋友圈或者加载我的朋友圈应该是封装成类方法,对某一条朋友圈评论或赞应该封装成实例方法。
又如有一个用户类,请求附近的用户,应该写成类方法,更新当前用户的资料,应该写成实例方法。
5、对于OC中的一个方法 – (void)initWithName: (NSString *)name Age: (int)age Sex: (NSString *)sex;它的什么类型的方法?函数名是什么?有几个参数?返回值是什么类型?
①实例方法;②函数名是:initWithName: Age: Sex;③有3个参数;④返回值是void类型;
6、#include,#import,@class各有什么作用?
(1)#include:
区分 #include <x.h>与#include "x.h"的作用:
#include <x.h>:它用于对系统自带的头文件的引用,编译器会在系统文件目录下去查找该文件。
#include "x.h":用户自定义的文件用双引号引用,编译器首先会在用户目录下查找,然后到安装目录中查找,最后在系统文件中查找。
在使用#include的时候要注意处理重复引用(这也是objc中#include与#import的区别);
例如:ClassA 与 ClassB同时引用了ClassC,不做重复引用处理的时候在ClassD中同时引用ClassA,ClassB编译会提示对ClassC重复引用的错误.
我们可以:#ifndef _CLASSC_H
#define _CLASSC_H
#include "ClassC"
#endif
这样处理在编译时就不会有重复引用的错误出现(在objc中#import解决了这个问题,这是它们的区别)
(2)#import:
#import 大部分功能和#include是一样的,但是他处理了重复引用的问题,我们在引用文件的时候不用再去自己进行重复引用处理.
(3)@class:
主要是用于声明一个类,告诉编译器它后面的名字是一个类的名字,而这个类的定义实现是暂时不用知道的,后面会告诉你.也是因为在@class仅仅只是声明一个类,所以在后面的实现文件里面是需要去#import这个类,这时候才包含了这个被引用的类的所有信息
※综上所述#include,#import与@class的区别可以做一下理解:
#include与#import在引用一个类的时候会包含这个类的所有信息包括变量方法等,但是这样做会对编译效率造成影响.比如有100个类都#import了ClassA,那么在编译的时候这100个类都会去对ClassA处理.又比如A被B引用,B被C引用,C被D引用.....此时如果A被修改,那么后面的B,C,D.....都需要重新进行编译.还有一个用法会引起编译错误的就是在ClassA中#import ClassB 在ClassB中#import ClassA那么在编译的时候也会出现未知错误。
所以一般来说,在interface中引用一个类,就用@class,它会把这个类作为一个类型来使用,而在实现这个interface的文件中,如果需要引用这个类的实体变量或者方法之类的,还是需要import这个在@class中声明的类。
7、什么时候会造成循环导入?请举例:
当有两个同时继承于NSObject的类(如:Man和Woman这两个类同时继承与NSObject),现在在Man这个类中要导入Woman实例变量,同时Woman这个类要导入Man这个实例变量,并且导入时使用#import,这个时候就会造成循环导入现象,处理方式是在其中一个类中使用@class;举例如下:
①新建一个继承于NSObject的Woman类:

②再新建一个继承于NSObject的Man类:

@dingding3w@126.com
Objective-C 快速入门--基础(一)的更多相关文章
- Scala快速入门 - 基础语法篇
本篇文章首发于头条号Scala快速入门 - 基础语法篇,欢迎关注我的头条号和微信公众号"大数据技术和人工智能"(微信搜索bigdata_ai_tech)获取更多干货,也欢迎关注我的 ...
- Objective-C 快速入门--基础(二)
1.什么是继承?OC中的继承有哪些特点? “继承”是面向对象软件技术当中的一个概念.如果一个类A继承自另一个类B,就把这个A称为"B的子类",而把B称为"A的父类&quo ...
- Objective C 快速入门学习一
Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/F ...
- CSS快速入门基础篇,让你快速上手(附带代码案例)
1.什么是CSS 学习思路 CSS是什么 怎么去用CSS(快速上手) CSS选择器(难点也是重点) 网页美化(文字,阴影,超链接,列表,渐变等) 盒子模型 浮动 定位 网页动画(特效效果) 项目格式: ...
- Objective C 快速入门学习三
1.数据类型 和C语言基本一样. 有一个特别数据类型id,可以储存任何类型的对象,它是实现多态和动态绑定的基础. Objective-C 2.程序结构 Objective-C和C的程序结构一模一样,具 ...
- python快速入门基础知识
1.变量赋值与语句 #python 不需要手动指定变量类型.不需要分号 #To assign the value 365 to the variable days,we enter the varia ...
- Objective-C 快速入门--基础(五)
1.什么是属性?属性会帮我们做哪些事情?请详细说明. (1)①属性是Objective-C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现:②能在一定程度上简化程序代码,并 ...
- Objective-C 快速入门--基础(四)
1.什么是Block? ① 块语法,本质上是匿名函数(没有名称的函数): ② Block是OC中的一种数据类型,在iOS开发中被广泛使用: ③ ^是Block的特有标记: ④ Block的实现代码包含 ...
- Objective-C 快速入门--基础(三)
1.OC有几种方式创建字符串对象?如:如何创建一个字符串对象:@“Baby”. OC中有3种方式创建字符串对象: 示例:main.m文件中: 控制台输出: 2.OC中如何获取字符串的长度? OC中获取 ...
随机推荐
- Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
<Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...
- 第2/24周 页_SQL Server 中数据存储的基本单位
上周通过探讨SQL Server如何执行一个查询奠定了基础.我也在那里提到页是8kb的缓存.今天我们对页进行进一步集中探讨,从性能调优角度挖掘出更多的细节. 页是SQL Server的基础,在SQL ...
- 实现jquery.ajax及原生的XMLHttpRequest跨域调用WCF服务的方法
关于ajax跨域调用WCF服务的方法很多,经过我反复的代码测试,认为如下方法是最为简便的,当然也不能说别人的方法是错误的,下面就来上代码,WCF服务定义还是延用上次的,如: namespace Wcf ...
- win10 设置 计算机/此电脑/我的电脑 图标到桌面上
桌面上右键--个性化 选择右边的 主题选项 然后点击 桌面图标设置 勾选计算机 图标 需要什么图标就勾选哪个就行了 然后点击 确定 这样就可以了
- WebForm 基础
IIS安装 webForm需要IIS安装 1.安装:控制面板--程序或功能--打开或关闭windows功能--Internet信息服务(打上勾)--确定 2.让vs和IIS相互认识vs:vs2012- ...
- Lua使用心得(1)
这几天研究了一下lua,主要关注的是lua和vc之间的整合,把代码都写好放在VC宿主程序里,然后在lua里调用宿主程序的这些代码(或者叫接口.组件,随便你怎么叫),希望能用脚本来控制主程序的行为.这实 ...
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
[源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...
- jquery基本选择器(.class选择器)
//通过class属性值匹配元素<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "ht ...
- 删除div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Maximum length of a table name in MySQL
http://dev.mysql.com/doc/refman/5.7/en/identifiers.html The following table describes the maximum le ...