美文网首页
Objective-C 快速入门--基础(一)

Objective-C 快速入门--基础(一)

作者: 禄子_c79b | 来源:发表于2019-03-15 18:11 被阅读0次

Objective-C 快速入门--基础(一)

1、实例变量的可见度有哪些?对访问变量有什么影响?

image

所谓的内部,指的是相应类的@implementation和@end之间

示例:

@interface Person : NSObject

{

@public

NSString *_hobby;   //兴趣!

@protected

NSString *_name;   //姓名

int _age;        //年龄!

@private

NSString *_sex; //性别

}

2、如果对于一个类Person来说,类中的实例变量_name,可见度设为受保护的.那我如何在本类及其子类以外的地方给_name赋值和取值呢?

使用setter和getter方法,示例:

.h中:

image

.m中:

image

main.m中:

image

控制台输出:

image

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类:

image

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

image

相关文章

  • Objective-C 快速入门--基础(一)

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

  • Objective-C 快速入门--基础(三)

    1、OC有几种方式创建字符串对象?如:如何创建一个字符串对象:@“Baby”。 OC中有3种方式创建字符串对象: ...

  • Objective-C 快速入门--基础(四)

    1、什么是Block? ① 块语法,本质上是匿名函数(没有名称的函数); ② Block是OC中的一种数据类型,在...

  • Objective-C 快速入门--基础(二)

    1、什么是继承?OC中的继承有哪些特点? “继承”是面向对象软件技术当中的一个概念。如果一个类A继承自另一个类B,...

  • Objective-C 快速入门--基础(五)

    1、什么是属性?属性会帮我们做哪些事情?请详细说明。 (1)①属性是Objective-C 2.0定义的语法,为实...

  • C#/.Net学习资料

    C#开发轻松入门——基础入门(慕课网) 零基础学C#(一)——基础入门(网易云课堂明日科技) 45分钟C#快速入门...

  • 2020版本Java300集资料免费分享福利

    2020年,Java零基础到精通资料教材,零基础入门Java,包含Java快速入门课程,干货分享,新基础Java教...

  • typescript学习笔记-基础类型

    基础类型快速入门 基础类型 string,number,boolean 数组类型 string,number,bo...

  • pandas小案例

    markdown太坑!!本文参见:十分钟快速入门Pandas入门可参照:官方文档入门基础知识可参照:官方文档基础知...

  • Objective-C基础入门(一)

    首先我们来看时钟类clock的设计 前缀@是objective-c(以下简称OC)特有的标识符,常用在使用类和对象...

网友评论

      本文标题:Objective-C 快速入门--基础(一)

      本文链接:https://www.haomeiwen.com/subject/ugvrmqtx.html