Objective-C 实例方法可见度,方法

一 实例方法可见度,方法

1.实例变量的可见度

可见度                                                                       特点

public(公有的)                                              实例变量可以在类的外部和内部操作

protected(受保护的,默认的)                         实例变量只能在该类和其子类内操作

private(私有的)                                               实例对象只能在该类内访问

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

思考:为什么不使用@public 关键字:

1.使用@ public 关键字,暴露了类内部的细节.

2.不符合面向对象语言的三大特性之一 __封装

二 .OC中的方法分两种:类方法和实例方法

1.类方法:只能类使用,例如:+(id)alloc   注意:类方法中不能使用实例变量

实例方法:只能对象使用,例如:- (void)sayH;

2.[person sayHi];

在 OC 中没有”student 调用 sayHi"这种表述

在 OC 中使用消息发送机制:[ receiver   message ];

正确表述:给 student 对象发送 sayHi 消息.

a.student 接收到消息,即方法 sayH;

b. student 找到 sayHi 方法,并执行.

3.” : “ 标示参数,不能省略.有冒号必须有参数.

4.setter,getter 的书写格式.

OC 里规定了 setter 和getter 的书写格式.

如果一个实例变量是 int age ;或者 int _age;

setter 的书写格式如下: - (void)setAge:(int)age; 即 set+ 首字母大写的实例变量名

(忽略下划线).

getter 的书写格式如下:- (int)age; 即返回值类型与变量类型一致,方法名由于实例变量名相同(忽略下划线)

三.与实例变量的关系

无论是 setter 还是 getter 内部操作的都是实例变量

每一个实例变量都需要一对 setter 和 getter 方法

四:自定义初始化方法

- (id)init 这个初始化方法只能给实例变量设置默认值,不灵活.

- (id)initWithName: 自定义初始化方法,根据需求定义初始化方法.

示例:

- (id)initWithName:(NSString *) name sex:(NSString *)sex;

- (id)initWithName:(NSString *)name sex:(NSString *)sex{

_name = name;

_sex = sex;

return self;

}

五.  #import

导入头文件,即:导入头文件中的内容到当前类.

#import “” 导入自定义类,# import<> 导入类库中的头文件.

功能类似于 C 语言中的# include, 但是可以避免头文件被重复导入

容易出现循环导入头文件问题

六:@ class

告诉编译器@ class 后的字符串作为类名使用,并未导入类的接口内容.

有效避免嵌套循环导入.

总结:

a. 实例变量有三种常见的可见度: @public, @protected,@private

[email protected] 违背了封装特性,面向对象开发中很少使用;@protected 默认可见度,自己和子类中能使用 —>访问实例变量;@ private 自己类中能使用—>访问实例变量.

c. 方法是 OC 的核心,采用消息机制:[ receive message].

“-“message 由对象来调用;

“+”message 由 类来调用.

时间: 2024-10-12 20:15:04

Objective-C 实例方法可见度,方法的相关文章

oc 可见度,方法

//  main.m //  OC02_可见度,方法 // //  Created by dllo on 15/7/16. //  Copyright (c) 2015年 cml. All rights reserved. // #import <Foundation/Foundation.h> #import "Student.h" #import "AudiCar.h" // OC里的枚举 NS_ENUM(NSUInteger, NSSeason){

Objective-C初始化方法

1.初始化方法: #import <Foundation/Foundation.h> @interface Person : NSObject{ NSString *_name; NSInteger _age; } //自定义初始化方法,必须以init开头 - (id)initWithName:(NSString *)name withAge:(NSInteger)age; //打印信息 - (void)showInfo; @end 这里我们定义了一个初始化方法,对名称和年龄进行初始化赋值操作

Objective C笔记(第一天)

• OC语言概述 1.早在20世纪80年代早期,Bard Cox发明了Objective C, 是扩充的C,面向对象的编程语言. 2.NEXTSTEP简称NS a.1985年,Steve Jobs成?立了NeXT公司. b.1988年,NeXT SoftWare公司获得了OC的语言授权, NEXTSTEP环境成为了苹果操作系统,创建的开发包.MACOS c.1996年,12月20?日,苹果公司宣布收购了NeXT software公司,NEXTSTEP环境为apple公司下主要开发.发?行操作系统

iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象

1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较.这一篇文章,我准备为大家介绍一下奇葩的Objective-C语言的语法和使用.这篇文章主要讲Objective-C的理论概念. 2.学习目标 2.1 Objective-C语言面向对象的特性与其他语言(C++)类比学习,声明定义一个MyObject类,并创建这个类的实例. 2.2 Objectiv

深入浅出Cocoa之消息(二)-详解动态方法决议(Dynamic Method Resolution) 【转】

序言 如果我们在 Objective C 中向一个对象发送它无法处理的消息,会出现什么情况呢?根据前文<深入浅出Cocoa之消息>的介绍,我们知道发送消息是通过 objc_send(id, SEL, ...) 来实现的,它会首先在对象的类对象的 cache,method list 以及父类对象的 cache, method list 中依次查找 SEL 对应的 IMP:如果没有找到且实现了动态方法决议机制就会进行决议,如果没有实现动态方法决议机制或决议失败且实现了消息转发机制就会进入消息转发流

深入解析 ObjC 中方法的结构

因为 ObjC 的 runtime 只能在 Mac OS 下才能编译,所以文章中的代码都是在 Mac OS,也就是 x86_64 架构下运行的,对于在 arm64 中运行的代码会特别说明. 在上一篇分析 isa 的文章从 NSObject 的初始化了解 isa中曾经说到过实例方法被调用时,会通过其持有 isa 指针寻找对应的类,然后在其中的 class_data_bits_t 中查找对应的方法,在这一篇文章中会介绍方法在 ObjC 中是如何存储方法的. 这篇文章的首先会根据 ObjC 源代码来分

JavaScript学习总结(十四)——JavaScript编写类的扩展方法

在?J?a?v?a?S?c?r?i?p?t?中?可以使?用?类的p?r?o?t?o?t?y?p?e属性来?扩?展?类的属?性?和?方?法,在实际开发当中,当JavaScript内置的那些类所提供的动态方法和动态属性不满足我们实际开发时,我们就可以通过"prototype"属性给自定义类添加方法和属性或者扩展原有的类中的方法和属性. 一.扩展JavaScript内置类,添加动态方法 语法格式: 类名.prototype.方法名 = function([param1],[param2],.

iOS开发Swift篇—(十)方法

一.简单说明 跟其他面向对象语言一样,Swift中的方法可以分为2大类: (1)实例方法(Instance Methods) 在OC中,实例方法以减号(-)开头 (2)类型方法(Type Methods) 在OC中,类型方法以加号(+)开头 二.实例方法 1.什么是实例方法? 实例方法:就是只能用对象实例调用的方法,也可以称为“对象方法” 实例方法的语法跟函数基本一样 2.代码示例: 1 class Dog { 2 func run() { 3 println("Dog--->run&qu

[原创]扩展方法基本用法

前言 首先我们看看msdn上面的解释:扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 其实说白了就是微软那班哥们写好的类库,我们无法修改,但是我们可以给这些类库通过一种方式添加我们的一些方法. 1.0 扩展方法应用场景 DateTime now = DateTime.Now; //1.0 将now格式化成yyyy-MM-dd 输出 string fmtstr = now.Tostring("yyyy-MM-dd");//2.0 将no