oc 基本语法 类 静态变量 常量
//
// ReViewClass.h
// hellowWorld
// 本类是oc复习练手类
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import <Foundation/Foundation.h> /**
OC常量:
头文件里声明常量:
extern NSString * const MyOwnConstant;
extern NSString * const YetAnotherConstant;
在.m中通过赋值定义常量:
NSString * const MyOwnConstant = @"myOwnConstant";
NSString * const YetAnotherConstant = @"yetAnotherConstant";
*/
//常量声明 注意:可以在@interface外面声明。
extern const NSString* EAST ;
extern const NSString* WEST ; @interface ReViewClass : NSObject{ /**
要点
(1)基类的私有属性能被继承,不能被使用。
(2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
(3)OC只能单继承
(4)OC所有类都有NSbObject基类
**/ /**
范围修饰词
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
**/
@public int _id ; @public NSString *_name ; /*
不写关键字默认是@private
private 变量能不能被继承?
能继承不能用,除非父类提供操作方法
*/
@private int classId ; }
//常量声明,可以放这里,但不能放上面{}内。
//extern const NSString* NORTH =@"north",不能在头文件里直接赋值。
extern const NSString* NORTH;
extern const NSString* SOUTH; @property (assign) NSString* mDescription ;
/*
属性:
(1)关键字@@property
(2)自动合成getter和setter方法。当声明一个属性(property)的时候编译器默认情况下会自动生成相关的getter和setter方法
(3)属性(property)关键词能够传递出相关行为的额外信息。属性提供了一些可能会使用的特性来进行声明,
包括
assign vs copy vs weak vs strong
atomic vs vs nonatomic
readwrite vs readonly 老版本 @property 需要在.m文件中对应使用synthesize 新版synthesize作用如下:
1.@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法。
2.禁止@synthesize:如果某属性已经在某处实现了自己的 setter/getter ,可以使用 @dynamic 来阻止 @synthesize 自动生成新的 setter/getter 覆盖。
3.内存管理:@synthesize 和 ARC 无关。
4.使用:一般情况下无需对属性添加 @synthesize ,但一些特殊情形仍然需要,例如protocol中声明的属性。
*/ /**
在括号外面声明方法,比如set get 方法。
*/ -(void)set_id :(int)stuId ;
/*
set_id知识点:
(1)oc 语法中如果想使用和java一样的"." 去访问类成员变量,那么必须定义一个与变量名相同的get方法。
注意是get+变量名:
例如有set_id以后ReViewClass 实例指针可以 ReViewClass._id ;否则 ReViewClass->_id ;
(2)在点语中可以调用不带参数的任何方法如:-(NSString*)getIdAndName;
*/
-(void)setName:(NSString *)stuName; -(int)getId;
-(NSString*)getName ;
-(NSString*)getIdAndName: (NSUInteger) stuId;
-(NSString*)getIdAndName;
/*
可以方法重载 同名不同参数
*/ -(ReViewClass *) init ;
+(int) getInstanceCount ; @end
//
// ReViewClass.m
// hellowWorld
//
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import "ReViewClass.h" /**
静态变量的特性:
(1)静态变量的作用域是与它定义的位置有关系
定义在文件中它的作用域就是整个文件,并且是私有的,其他的类或其他的文件是不可以访问该静态变量的
定义在方法内,它的作用域就是这方法,其他的方法是不可以访问该静态变量
(2)静态变量只初始化一次(和java中是一样的)
类方法和实例方法甚至函数都可以使用静态变量
(3)静态变量定义在源文件中(.m)
(4)静态变量可以定义在方法或函数体外,也可以定义在方法(类方法和实例方法)或函数体内。
静态变量定义在方法或函数体外
该方式适用于当静态变量会被本文件内的多个函数使用的情况,最好能把静态变量定义统一放在源文件的起始处(@implementation的外面), */
//静态变量实例。
static int instanceCount ; //常量赋值
const NSString* EAST =@"east" ;
const NSString* WEST =@"west"; @implementation ReViewClass @synthesize mDescription ; const NSString* NORTH = @"north" ; -(void)set_id:(int)stuId{
_id = stuId ;
}
-(void)setName:(NSString *)stuName{
_name = stuName ;
}
-(int)getId {
return _id ;
}
-(NSString*)getName {
return _name ;
} -(NSString*)getIdAndName: (NSUInteger) stuId;
{
NSMutableString * str = [[NSMutableString alloc]init];
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
}
-(NSString*)getIdAndName;
{
NSMutableString * str = [[NSMutableString alloc]init];
if(nil!=_name)
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
} +(NSString *)toString{
return [NSString stringWithFormat:@"id:%d" ,];
} //类方法用于操作静变量
+(int) getInstanceCount {
return instanceCount ;
}
-(ReViewClass*) init{
instanceCount++;
return [super init];
} @end
#import <Foundation/Foundation.h>
#import "ReViewClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
extern NSString* NORTH ; // insert code here...
NSLog(@"Hello, World!");
ReViewClass *reviwClass = [[ReViewClass alloc]init];
ReViewClass *reviwClass1 = [[ReViewClass alloc]init];
ReViewClass *reviwClass2 = [[ReViewClass alloc]init];
ReViewClass *reviwClass3 = [[ReViewClass alloc]init];
ReViewClass *reviwClass4 = [[ReViewClass alloc]init];
[reviwClass setName:@"hongtao"];
reviwClass._id = ;
reviwClass.mDescription = @"string property!";
NSLog(@"%@,%@",reviwClass.getIdAndName ,[reviwClass getName]);
NSLog(@"%d",[ReViewClass getInstanceCount]);
NSLog(@"%@",NORTH);
// NSString* temStr =[reviwClass getIdAndName];
//运行了相应方法,但方法返回值并没有得到- (void)performSelector:原型
[reviwClass performSelector:@selector(getIdAndName:) withObject:@() afterDelay:(1.2f)]; }
return ;
}
oc 基本语法 类 静态变量 常量的更多相关文章
- PHP 类属性 类静态变量的访问
php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...
- python类静态变量
python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...
- php 类静态变量 和 常量消耗内存及时间对比
在对类执行100w次循环后, 常量最快,变量其次,静态变量消耗时间最高 其中: 常量消耗:101.1739毫秒 变量消耗:2039.7689毫秒 静态变量消耗:4084.8911毫秒 测试代码: cl ...
- C++类静态变量的一种使用特例
不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!
- php类 静态变量赋值 static $name="abc"
<?php class test { static $name="abc"; } echo test::$name; 1.巴斯科范式 class_statement: var ...
- C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序
为了弄清这个代码,写了个测试,但是测试的结果和往上的代码有所差别,仁者见仁,智者见智了.如果我的测试用例用问题,欢迎指出. 首先,方法的是在被调用时执行,但是静态方法在所有地方都可以调用,应该在很早的 ...
- Java变量类型,实例变量 与局部变量 静态变量
实例变量: 实例变量在类中声明,但在方法的外面,构造函数或任何块. 当空间分配给某个对象在堆中,插槽为每个实例变量创建值. 当一个对象与使用关键字 “new” 来创建,在对象被销毁销毁创建的实例变量. ...
- C#静态变量 总结
在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用.但有些时候,这样做却不是个明智的选择. 假设我们要定义一个图书类,要求该类能保存图书 ...
- Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序
直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...
随机推荐
- D-Link系列路由器漏洞挖掘入门
D-Link系列路由器漏洞挖掘入门 前言 前几天去上海参加了geekpwn,看着大神们一个个破解成功各种硬件,我只能在下面喊 6666,特别羡慕那些大神们.所以回来就决定好好研究一下路由器,争取跟上大 ...
- Nginx负载均衡和HTTPS配置及集群搭建
Nginx的高可用(HA)配置 1.高可用配置结构(画图说明) 2.KeepAlived的安装和配置 1.安装 yum install keepalived 2.keepalived.conf配置文件 ...
- okhttp同步请求流程和源码分析
在上一次[http://www.cnblogs.com/webor2006/p/8022808.html]中已经对okhttp的同步与异步请求的基本使用有了一了初步了解,这次来从源码的角度来分析一下同 ...
- lib异步中断
基于libusbx-1.0.18-rc1,libusbx现已重新merage到libusb.1. 初始化使用libusb_init初始化libusb,如果是单设备通信,ctx参数可以传NULL,表示使 ...
- IntelliJ IDEA安装后几个重要的目录及配置文件讲解
本文大概记录了IntelliJ IDEA安装之后比较重要的目录和几个核心文件 重要的安装目录 安装完之后的bin目录大致如下 IntelliJ IDEA 的安装目录并不复杂,上图为最常改动的 bin ...
- python+Appium自动化:Appium元素检测
appium模拟用户的真实操作,如果用户第一次进入app或许会弹出一些更新提示,或者是引导页面,但是下一次开启app时则没有引导页这些界面,这时,脚本中又肯定不考虑用两套代码来进行维护,此时如何应对这 ...
- JS 对浏览器相关的操作
// 获取浏览器 宽高 var width = window.innerWidth || document.documentElement.clientWidth || document.body.c ...
- 14-SQLServer索引碎片
一.总结 1.数据库的存储本身是无序的,建立聚集索引之后,就会按照聚集索引的物理顺序存入硬盘: 2.建立索引完全是为了提升读取的速度,相对写入的速度就会降低,没有索引的表写入时最快的,但是大多数系统读 ...
- layui分页的使用心得
// 执行页面加载的函数 loadData(1) // 每页条数 var limit = 5; // 渲染页面 function loadData(curr){ $.ajax({ type:" ...
- js特效 15个小demo
js特效和15个小demo 代码如下:images文件夹未上传 1.图片切换: <!DOCTYPE html> <html> <head> <title> ...