记录OC学习的一点一滴(一)
练习代码:
代码一:(面向过程的OC)
//
// main.m
// Class01Test01
//
// Copyright (c) 2014年 levi. All rights reserved.
//
#import <Foundation/Foundation.h> @interface Fraction : NSObject
-(void) setarr;
-(void) rand;
-(void) judge; @end @implementation Fraction
{
NSInteger a;
NSInteger b;
//NSArray *arr = @[@"剪刀", @"石头", @"布"];
NSArray *arr;
} -(void)setarr
{
arr = @[@"剪刀",@"石头",@"布"];
} -(void)rand
{
a = arc4random()%3;
b = arc4random()%3;
} -(void)judge{
NSLog(@"%@ vs %@", arr[a], arr[b]);
if( (a == 0 && b == 2) || a > b)
NSLog(@"%@ vs %@ A胜出", arr[a], arr[b]);
else if(a == b)
NSLog(@"%@ vs %@ 平局", arr[a], arr[b]);
else if( (a == 2 && b == 0) || a < b )
NSLog(@"%@ vs %@ B胜出", arr[a], arr[b]);
else NSLog(@"ERROR!");
} @end int main(int argc, const char * argv[])
{ @autoreleasepool {
// insert code here...
//常量字符串
//@“”字符串对象
//0 1 2 j s b
Fraction *frac1 = [[Fraction alloc] init];
[frac1 setarr];
[frac1 rand];
[frac1 judge];
}
return 0;
}
猜拳代码(简单面向对象的思想):
//
// Guess.h
// Class1-02
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h>
/*
代码规范:
1.类名首字母大写
2.方法名首字母小写 类:抽象 笔记本
对象:具体 桌上这台笔记本 oc中声明一个类 @interface开始 Guess(类名): NSObject(父类) @end结束
oc中所有类都直接或者间接的继承自 NSObject
*/ @interface Guess : NSObject
//void startGuess;
-(void) startGuess;
/*
OC中方法 “-” 对象方法、对象调用 “+” 类方法、类调用
startGuess 方法名 */ @end
//
// Guess.m
// Class1-02
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import "Guess.h"
/*
@implementation 实现
方法1 实现
方法2 实现
@end 结束
*/ @implementation Guess
- (id)init
{
/*
定时器、每隔一秒会调用当前对象的startGuess方法
*/
self = [super init];
if (self) {
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(startGuess) userInfo:nil repeats:YES];
}
return self;
} -(void)startGuess
{
NSArray *arr = @[@"剪刀", @"石头", @"布"];
NSInteger a = arc4random()%3;
NSInteger b = arc4random()%3;
NSLog(@"%@ vs %@", arr[a], arr[b]);
if( (a == 0 && b == 2) || a > b)
NSLog(@"%@ vs %@ A胜出", arr[a], arr[b]);
else if(a == b)
NSLog(@"%@ vs %@ 平局", arr[a], arr[b]);
else if( (a == 2 && b == 0) || a < b )
NSLog(@"%@ vs %@ B胜出", arr[a], arr[b]);
else NSLog(@"ERROR!");
}
@end
//
// main.m
// Class1-02
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Guess.h"
int main(int argc, const char * argv[])
{ @autoreleasepool { /*
语法[类名/方法名];
类经过实例化 变成对象
char *p = malloc(1024);
memset(p, 0, 1024);
*/
Guess *g = [Guess alloc];
g = [g init];
[g startGuess];
/*
启动事件循环 让main函数不退出
*/
[[NSRunLoop currentRunLoop] run];
}
return 0;
}
简单的继承:
//
// Person.h
// Class1_03
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h> @interface Person : NSObject
{
/*
成员变量(字段)
命名规范:_xxx mxxx
@public 公共类型 @和C++做区分
@private 私有类型 只能在本类中访问
@proteted 保护类型 能在当前类和它的子类中访问(缺省) */
@protected
NSInteger _age;
BOOL _gender;
CGFloat _height; }
/*
方法声明(+ -)
*/
- (void)qfTest;
//+ (void)qfTestone; //带参数
- (void)setAge:(NSInteger)age;
- (NSInteger)age;
- (void)setGender:(BOOL)gender;
- (BOOL)gender;
- (void)setHeight:(CGFloat)height;
- (CGFloat)height;
- (void)setAge:(NSInteger)age withGender:(BOOL)gender;
/* 方法名 : setAge:withGender */ @end //
// Person.m
// Class1_03
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import "Person.h" @implementation Person
-(void)qfTest
{
_age = 10;
}
/* +方法无法访问成员变量 +(void)qfTestone
{
_age = 10;
} */ - (void)setAge:(NSInteger)age
{
_age = age;
} - (NSInteger)age
{
return _age ;
} - (void)setGender:(BOOL)gender
{
_gender = gender;
} - (BOOL)gender
{
return _gender;
} - (void)setHeight:(CGFloat)height
{
_height = height;
} - (CGFloat)height
{
return _height;
} - (void)setAge:(NSInteger)age withGender:(BOOL)gender
{
_age = age;
_gender = gender;
} @end //
// Student.h
// Class1_03
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import "Person.h" @interface Student : Person @end //
// Student.m
// Class1_03
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import "Student.h" @implementation Student
-(void)test
{
/*
self 当前类或者当前对象
super 当前类或者对象的父类
*/
self->_age = 90;
}
@end //
// main.m
// Class1_03
//
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Person.h"
#import "Student.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Person *p = [[Person alloc] init]; [p qfTest];
/*
[Person qfTestone];
+ 方法只能类调用
- 方法只能对象调用
*/ /*
@public 可以访问
p->_age = 24;
p->_gender = YES;
p->_height = 1.82;
NSLog(@"Age is %ld\nGender is %d\nHeight is %g", p->_age, p->_gender, p->_height);
*/
//Student *s = [[Student alloc] init];
/* 以方法形式暴露成员变量 */
[p setAge:99 withGender:YES];
[p setGender:NO];
//[p setHeight:18.2];
NSLog(@"p->_age is %ld\np->_gender is %d\np->height = %lf", [p age], [p gender], [p height]);
}
return 0;
}
题目:小明手里有两张牌,左手红桃A,右手方片K,现在让小明交换两只手里的牌,问交换之后,小明左右手的牌,各是什么?
用面向对象的方式来说明这个题目
代码如下:
//
// XiaoMing.h
// Class1_04
//
// Created by Levi on 14-3-13.
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Hand.h"
@interface XiaoMing : NSObject
{
Hand *_left;
Hand *_right; } - (void) setLeftCard:(char)card1 rightCard:(char)card2;
- (void) swap;
- (void) result; @end //
// XiaoMing.m
// Class1_04
//
// Created by Levi on 14-3-13.
// Copyright (c) 2014年 levi. All rights reserved.
// #import "XiaoMing.h" @implementation XiaoMing
- (void) setLeftCard:(char)card1 rightCard:(char)card2
{
_left = [[Hand alloc] init];
_right = [[Hand alloc] init];
[_left setCard:card1];
[_right setCard:card2];
}
- (void) swap
{
char tmp = [_left card];
[_left setCard:[_right card]];
[_right setCard:tmp];
}
- (void) result
{
NSLog(@"左手 : %c,右手 : %c", [_left card], [_right card]);
}
@end //
// Hand.h
// Class1_04
//
// Created by Levi on 14-3-13.
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h> @interface Hand : NSObject
{
char _card;
}
- (void)setCard:(char)card;
- (char)card;
@end //
// Hand.m
// Class1_04
//
// Created by Levi on 14-3-13.
// Copyright (c) 2014年 levi. All rights reserved.
// #import "Hand.h" @implementation Hand
- (void)setCard:(char)card
{
_card = card;
} - (char)card
{
return _card;
} @end //
// main.m
// Class1_04
//
// Created by Levi on 14-3-13.
// Copyright (c) 2014年 levi. All rights reserved.
// #import <Foundation/Foundation.h>
#import "XiaoMing.h"
int main(int argc, const char * argv[])
{ @autoreleasepool { XiaoMing *xm = [[XiaoMing alloc] init];
[xm setLeftCard:'A' rightCard:'B'];
[xm result];
[xm swap];
[xm result];
}
return 0;
}
Ps:临渊羡鱼、不如退而结网。
记录OC学习的一点一滴(一)的更多相关文章
- 记录OC学习的一点一滴(二)
NSString 基础练习: 代码: // // main.m // NSStringDemo01 // // Created by Levi on 14-3-14. // Copyright (c) ...
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- 记录Python学习中的几个小问题
记录Python学习中的几个小问题,和C#\JAVA的习惯都不太一样. 1.Django模板中比较两个值是否相等 错误的做法 <option value="{{group.id}}&q ...
- 记录android学习、开发过程温故知新
记录android学习.开发过程温故知新
- OC学习总结之面向对象和类
OC学习总结之面向对象和类 Objective-c是c语言的母集合,它的原意就是在原始的c语言的主体上加入面向对象的特性.1.面向对象和面向过程 面向对象和面向过程是编程的两种思考方式.面向对象 ...
- OC学习16——对象归档
转载自 OC学习篇之---归档和解挡 OC中的归档就是将对象写入到一个文件中,Java中的ObjectInputStream和ObjectOutputStream来进行操作的.当然在操作的这些对象都 ...
- OC学习11——循环引用与@class
转载自 OC学习篇之---@class关键字的作用以及#include和#import的区别 一.#import和#include的区别 当我们在代码中使用两次#include的时候会报错:因为#in ...
- OC学习9——反射机制
1.OC提供了3种编程方式与运行环境进行交互: 直接通过OC的源代码:这是最常见的方式,开发人员只是编写OC源代码,而运行环境负责在后台工作. 通过NSObject类中定义的方法进行动态编程:因为绝大 ...
- OC学习6——面相对象的三大特性
我们在学习Java的时候都知道,类有三大特性:继承,封装,多态,这也是面向对象的三大特征.OC学习篇之---类的三大特性(封装,继承,多态) 1.封装(Encapsulation)是指将对象的状态信息 ...
随机推荐
- 以正确的方式开源 Python 项目(转)
大多数Python开发者至少都写过一个像工具.脚本.库或框架等对其他人也有用的工具.我写这篇文章的目的是让现有Python代码的开源过程尽可能清晰和无痛.我不是简单的指——“创建一个GitHub库,提 ...
- js之按键总结
js 实现键盘记录 兼容FireFox和IE 2009-01-07 11:43 作者:羽殇仁 转载请注明出处,谢谢. 本篇文章是我的第一百篇blog文章,恭喜一下! 这两天突然想弄弄js的键盘记录,所 ...
- Redis实现高并发分布式序列号
使用Redis实现高并发分布式序列号生成服务 序列号的构成 为建立良好的数据治理方案,作数据掌握.分析.统计.商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和 ...
- SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示
SimpleInjector与MVC4集成,与Web Api集成,以及通过属性注入演示 1,与MVC集成 见http://simpleinjector.codeplex.com/wikipage? ...
- 6天通吃树结构—— 第五天 Trie树
原文:6天通吃树结构-- 第五天 Trie树 很有段时间没写此系列了,今天我们来说Trie树,Trie树的名字有很多,比如字典树,前缀树等等. 一:概念 下面我们有and,as,at,cn,com这些 ...
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- Eclipse部署Web项目(图文讲解)
讲解是在linux下完成的,但对windows系统,操作也是一样的,不要被吓到了 1.下载Eclipse
- 建立TextView位置的部分可以点击,不同的颜色
String url="注册代表宝藏驱动器,你已经允许成员<服务条款>,请仔细阅读. "; SpannableStringBuilder style = new Spa ...
- Android微信道共用,没有反应
研究2日,寻找良好的比较完整的文章一天.发送链接:http://www.apkbus.com/android-138326-1-1.html 然而,按照上面的教程一步一步做.结果点击分享或无反应. 出 ...
- oracle处理节点之间的父子关系
通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的.而当我们使用Oracle当数据库,我们可以有一个简 ...