iOS基础1
来源:互联网 发布:马士兵java教程下载 编辑:程序博客网 时间:2024/06/05 17:07
http://blog.csdn.net/jiangwei0910410003/article/details/52413396
http://blog.csdn.net/jiangwei0910410003/article/details/52413396
http://blog.csdn.net/jiangwei0910410003/article/details/52413396
http://blog.csdn.net/jiangwei0910410003/article/details/52413396
1111111111,oc语言基础
1,分类
@interface person(stone)。 //person分类类型 stone分类名
-----如果你想扩充一个类,就应该去继承这个类。但是oc里面有更好的方法,就是分类
-----可以使得不修改原来类的代码的基础上,对某个类进行方法的扩充
-----分类只能扩充方法,不能增加成员变量的定义
案例1111111111111111111111
/*
0000000.h
@interface Person(LP)
- (void)study;
@end
00000000.m
@implementation Person(LP)
- (void)study
{NSLog(@"正在学习---");}
@end
000000000.m
@autoreleasepool{
Person *p1 = [[person alloc]initWithAge:33 andName:@"jack"];
NSLog(@"年龄:%d,名字:%@",p1.age,p1.name);
[p1 study]//调用分类的方法--分类创建的方法,还是使用原始类对象进行访问,需要引入分类的头文件
}
*/
案例2
/*
除已有的Person.h和Person.m,新增两个文件(当然这样的分类 可以有很多个)
Person+Stone.h
Person+Stone.m
main.m
*/
===========扩展扩展扩展扩展扩展扩展=========
===========类的延展延展延展延展延展=========
===========extensionextensionextension========
在普通类中的方法都是public的。。如果使用方法私有化,有两种方式:
1. 使用类似 分类的方式定义头文件,但是没有实现类,而是写在原始实现类.m中
PersonExtend.h
在Person.m 引入PersonExtend.h ,并实现方法, 方法即为私有的。
2. 将@inteface ... @end 直接写到 Person.m中。或者不用@interface... @end声明方法,而在Person.m直接实现一个方法。不需要新建文件
Person.m
2,协议
oc中的协议就是相当于java中的接口(抽象类),只不过oc中的名字更形象点
协议就是定义了一组方法,然后让其他类去实现
==================================================
WithProtocol.h
#import <Foundation/Foundation.h>
@protocol WithProtocol <NSObject>
//默认是必须实现的
//必须实现
@required
- (void)finshTask;
- (void)dontLate;
//可选实现
@optional
- (void)wearNeat;
@end
================================================
这里就定义了一个协议WithProtocol
协议的定义格式
@protocol 协议名 <父协议>
定义方法
@end
协议中定义的方法还有两个修饰符:
@required:这个表示这个方法是其他类必须实现的,也是默认的值
@optional:这个表示这个方法对于其他类实现是可选的
这个就和类似与Java中的抽象类了,如果是abstract修饰的就必须实现,所以如果一个协议中没有@optional修饰的方法,那么这个协议就相当于Java中的接口了。
这里要注意的是,上面的代码中NSObject不是我们之前说的NSObject类了,而是NSObject协议,他也是OC中第一个协议,这个名字相同在OC中是没有关系的。
===================================
再看一下协议的使用
Student.h
#import <Foundation/Foundation.h>
#import "WithProtocol.h"
@interface Student : NSObject <WithProtocol>//使用协议很简单,直接在继承类(NSObject)后面<协议名>即可
-(void)study;
@end
====================================
====================================
Student.m
#import "student.h"
@implementation student
-(void)study{NSLog(@"study");}
//直接在.m文件中实现即可,不需要在.h文件中再次定义
#pragma mark -WithProtocol
-(void) finshTask{NSLog(@"完成任务");}
-(void)dontLate{NSLog(@"不迟到");}
====================================
+++++++++++++
===========================================#pragma mark -WithProtocol这个作用就是做一下标记,标记后面的方法都是协议中的方法
这样就可以将一个类中的方法类别分得更细
看它是协议中的方法还是类本身的方法
===========================================
===========================================================================
测试类:
这里有一个方法respondsToSelector:@selector,这个方法的作用是判断当前对象中是否定义了一个方法,这个方法还是很有用的,如果在Java中,我们可能需要用反射去实现了。
============================================================================
3,函数块
代码块也称block。是封装代码的一种机制,也可以称为匿名函数
使用这种机制可以将一段代码放入block变量中进行存储
4,Foundation
5,属性
6,KVC和KVO
- 1-iOS基础
- iOS UI基础1
- iOS基础1
- IOS基础动画使用1
- ios基础
- ios基础
- iOS基础
- IOS 基础
- ios基础
- ios 基础
- IOS基础
- ios基础
- ios基础
- ios基础
- ios基础
- iOS 基础
- iOS基础
- IOS基础
- Imac查看软件的安装目录
- How to Convert a 32bit Database to 64bit Database on Linux
- 设计模式(内容是我从书上总结下来的,分享给大家)
- mysql 中 MyISAM和InnoDB 对比
- 建议135: 考虑使用肯定性的短语命名布尔属性
- iOS基础1
- 风电机组状态监测系统(CMS)
- 管理状态栏和导航栏
- 移动端上传照片 预览(解决iOS等设备照片旋转90度的bug)
- Android7.0 Binder通信(3) 客户进程查询和使用服务进程
- 建议136:优先使用后缀表示已有类型的新版本
- Xamarin.iOS提供没有匹配的配置文件
- 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个 子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。
- FZU Problem 2214 Knapsack problem(01背包,超大背包)——第六届福建省大学生程序设计竞赛-重现赛