oc18--self1
//
// Iphone.h
// day13 #import <Foundation/Foundation.h> typedef enum
{
kFlahlightStatusOpen,
kFlahlightStatusClose
} FlahlightStatus; @interface Iphone : NSObject
{
int _cpu;
}
+ (void)carameWithFlahlightStatus:(FlahlightStatus)status;
+ (void)openFlahlight;
+ (void)closeFlahlight;
@end
//
// Iphone.m
// day13 #import "Iphone.h" @implementation Iphone /*
类方法中可以直接调用类方法
类方法中不可以直接调用对象方法
类方法中不能访问成员变量
*/ + (void)carameWithFlahlightStatus:(FlahlightStatus)status
{
if (status == kFlahlightStatusOpen) {
// [Iphone openFlahlight];
// 其实在类方法中调用类方法除了可以使用类名调用以外, 还可以使用self来调用
[self openFlahlight];
}else
{
// [Iphone closeFlahlight];
// self == Iphone
[self closeFlahlight];
}
NSLog(@"拍照");
} + (void)openFlahlight
{
NSLog(@"打开闪光灯");
} + (void)closeFlahlight
{
NSLog(@"关闭闪光灯");
}
@end
//
// main.m
// self关键字 #import <Foundation/Foundation.h>
#import "Iphone.h" int main(int argc, const char * argv[]) {
// self不能离开类, 离开类之后没有任何意义
[Iphone carameWithFlahlightStatus:kFlahlightStatusClose];
return ;
}
self2:
//
// Iphone.h
// day13 #import <Foundation/Foundation.h> typedef enum
{
kFlahlightStatusOpen,
kFlahlightStatusClose
} FlahlightStatus; @interface Iphone : NSObject
{
int _cpu;
} - (void)carameWithFlahlightStatus:(FlahlightStatus)status;
- (void)openFlahlight;
- (void)closeFlahlight;
@end
//
// Iphone.m
// day13 #import "Iphone.h" @implementation Iphone /*
如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象
如果self在类方法中, 那么self就代表调用当前类方法的那个类
总结:
我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象"
*/
- (void)carameWithFlahlightStatus:(FlahlightStatus)status
{
if (status == kFlahlightStatusOpen) {
// 其实self不仅仅可以调用我们的类方法, 还可以调用对象方法
// self == 对象 == p
NSLog(@"self = %p", self);
[self openFlahlight];
}else
{
[self closeFlahlight];
}
NSLog(@"拍照");
} - (void)openFlahlight
{
NSLog(@"打开闪光灯");
} - (void)closeFlahlight
{
NSLog(@"关闭闪光灯");
} @end
//
// main.m
// self关键字2 #import <Foundation/Foundation.h>
#import "Iphone.h" int main(int argc, const char * argv[]) { Iphone *p = [Iphone new];
NSLog(@"p = %p", p);
[p carameWithFlahlightStatus:kFlahlightStatusOpen]; return ;
}
self3:
//
// Iphone.h
// day13 #import <Foundation/Foundation.h> typedef enum
{
kFlahlightStatusOpen,
kFlahlightStatusClose
} FlahlightStatus; @interface Iphone : NSObject
{
int cpu;
} - (void)setCpu:(int)cpu;
+ (void)carameWithFlahlightStatus:(FlahlightStatus)status;
+ (void)openFlahlight;
+ (void)closeFlahlight;
@end
//
// Iphone.m
// day13 #import "Iphone.h" @implementation Iphone /*
如果self在对象方法中, 那么self就代表调用当前对象方法的那个对象
如果self在类方法中, 那么self就代表调用当前类方法的那个类
总结:
我们只用关注self在哪一个方法中 , 如果在类方法那么就代表当前类, 如果在对象方法那么就代表"当前调用该方法的对象" 注意:
>self会自动区分类方法和对象方法, 如果在类方法中使用self调用对象方法, 那么会直接报错
>不能在对象方法或者类方法中利用self调用当前self所在的方法 使用场景:
可以用于在对象方法之间进行相互调用
可以用于在类方法之间进行相互调用 可以用于区分成员变量和局部变量同名的情况
*/
+ (void)carameWithFlahlightStatus:(FlahlightStatus)status
{
if (status == kFlahlightStatusOpen) {
NSLog(@"self = %p", self);
[self openFlahlight]; // p
}else
{
[self closeFlahlight];
}
NSLog(@"拍照");
} + (void)openFlahlight
{
NSLog(@"打开闪光灯");
NSLog(@"self = %p", self);
// 死循环
[self openFlahlight]; // p
} + (void)closeFlahlight
{
NSLog(@"关闭闪光灯");
} - (void)setCpu:(int)cpu
{
self->cpu = cpu;
}
@end
//
// main.m
// self关键字的注意点 #import <Foundation/Foundation.h>
#import "Iphone.h" int main(int argc, const char * argv[]) { [Iphone carameWithFlahlightStatus:kFlahlightStatusOpen];
// Iphone *p = [Iphone new];
// NSLog(@"p = %p", p);
// [p carameWithFlahlightStatus:kFlahlightStatusOpen];
return ;
}
oc18--self1的更多相关文章
- ios动态添加属性的几种方法
http://blog.csdn.net/shengyumojian/article/details/44919695 在ios运行过程中,有几种方式能够动态的添加属性. 1-通过runtime动态关 ...
- JS中构造函数与函数
//构造函数中,如果返回的是一个对 象,那么就保留原意. 如果返回的是非对象,比如数字.布尔和字符串,那么就返回 this,如果没有 return 语句,那么也返回this. var myFun1 = ...
- pyqt小例子 音乐盒
源代码1: # -*- coding: utf-8 -*- import sys,time,os import ctypes from PyQt4 import QtCore, QtGui,Qt fr ...
- 使用javascript开发2048
嗯,团队队友开发了一个简单的2048...哈哈,没办法,这游戏那么疯狂,必须搞搞啦,大家能够直接粘贴代码到一个html文件,直接执行就可以 依赖文件:jquery,假设乜有,大家能够自己下载一份 &l ...
- vue scrolle在tab 中使用
1. 使用npm 安装 npm i vue-scroller -S 地址: https://github.com/wangdahoo/vue-scroller2. 引入 main.js: import ...
- MQTT研究之EMQ:【JAVA代码构建X509证书】
这篇帖子,不会过多解释X509证书的基础理论知识,也不会介绍太多SSL/TLS的基本信息,重点介绍如何用java实现SSL协议需要的X509规范的证书. 之前的博文,介绍过用openssl创建证书,并 ...
- MQTT研究之EMQ:【SSL证书链验证】
1. 创建证书链(shell脚本) 客户端证书链关系: rootCA-->chainca1-->chainca2-->chainca3 ca caCert1 caCert2 caCe ...
- ftp工具类
package com.ytd.zjdlbb.service.zjdlbb; import java.io.File;import java.io.FileInputStream;import jav ...
- Lua调用C++时打印堆栈信息
公司的手游项目,使用的是基于cocos2d-x绑lua的解决方案(参数quick-x的绑定),虽然使用了lua进行开发,更新很爽了,但是崩溃依然较为严重,从后台查看崩溃日志时,基本上只能靠" ...
- ARM开发板搭建NFS网络文件共享方法
前边 已经提到过吧vmare的IP改成了静态IP,对于上网来说,这个是个麻烦的事.现在重新配置Vmware的IP VMware-Edit-Virtual network editor 选择PC机的无线 ...
随机推荐
- 微信小程序特殊字符转义方法——&转义&等等
在我编写公司小程序的过程中,有一次在网页端添加了一张图片,结果在小程序端访问失败了,究其原因,竟然是因为该图片名称中有一个“&”符号,网页端添加后,自动转义成了“&”存储到了数据库.当 ...
- spring框架搭建(一)
spring介绍 spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发复杂性而诞生的. 简单来说spring是一个一站式轻量级开源框架. IOC:In ...
- Tour UVA - 1347
John Doe, a skilled pilot, enjoys traveling. While on vacation, he rents a small plane and starts vi ...
- Android第三方登陆之新浪微博Weibo篇(原生登陆授权)
前言 Android第三方登录可以说是非常的常见,今天主要先说一下新浪微博第三方登陆授权. SDK版本支持 SDK v3.0已经发布了支持iPhone和Android的版本. 须将你的应用的包名签名信 ...
- 阿里巴巴矢量库IconFont__使用小录
使用阿里巴巴矢量库方法虽然不难,但本人记性不好,遂在次记录几笔 阿里巴巴矢量库地址:http://www.iconfont.cn/plus 阿里巴巴矢量库图标好处: 1:图标矢量化 2:自己总结:ic ...
- (转)基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作
http://www.cnblogs.com/wuhuacong/p/5147368.html 在前面介绍了很多篇相关的<Bootstrap开发框架>的系列文章,这些内容基本上覆盖到了我这 ...
- Repeater + 分页控件 AspNetPager 研究
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs ...
- jdk?jre?
很多人都搞不懂什么是jdk,什么是jre,只知道电脑安装了这两个就能开发和运行java程序,这里我简单讲讲什么是jdk,什么是jre. jdk,即Java Development Kit,故名思意就是 ...
- javaee utf-8文件的转换
package Zy; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.Fil ...
- cd:切换目录
cd命令 1.命令详解 [功能说明] cd命令是“change directory”中每个单词的首字母缩写,其功能是从当前工作目录切换到指定的工作目录. [语法格式] cd [option] ...