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(); // ...
随机推荐
- shell中处理参数getopts命令
一.getopts 简介 由于shell命令行的灵活性,自己编写代码判断时,复杂度会比较高.使用内部命令 getopts 可以很方便地处理命令行参数.一般格式为:getopts optstring n ...
- pipenv虚拟环境使用方法
1.打开cmd安装pipenv, pip install pipenv 2.新建工程目录,项目目录,然后cmd进入工程目录 基本命令: pipenv install ...
- Python—selenium模块(浏览器自动化工具)
selenium可以用来完成浏览器自动化相关的操作,写一些代码制定一些基于浏览器自动化的相关操作(行为动作),当代码执行后,浏览器就会自动触发相关的事件 安装方法: pip install selen ...
- greenlet、gevent:历史悠久的用于处理并发的模块
greenlet介绍 greenlet是用C语言编写的一个模块,然后让python调用,目的就是为了让python支持协程. A "greenlet" is a small ind ...
- Ubuntu 18.04 手动升级内核
一般情况下,系统正常更新,会自动升级内核到可用的最新版. 查看已安装的内核 $ sudo dpkg -l | grep linux-image 查看当前使用的内核 $ sudo uname -r 查看 ...
- Vim生存技能
Vim生存技能 必备: 写模式: i,a,o 退出写模式: ecs 快捷: Ctrl+u: 向文件首翻半屏 Ctrl+d: 向文件尾翻半屏 Ctrl+f: 向文件尾翻一屏 Ct ...
- select * from a,b探讨
select * from a,b探讨 今天看同事代码里使用了select * from a,b where a.id=b.id,而我平时都是使用select * from a inner join ...
- POJ-3974-Palindrome(马拉车)
链接: http://poj.org/problem?id=3974 题意: Andy the smart computer science student was attending an algo ...
- Badboy + JMeter性能测试(转)
1. 软件介绍 1.1 Badboy Badboy是用来录制操作过程的,它录制的结果是被jmeter做并发测试的素材使用. 下载网址:http://www.badboy.com.au/ 1.2下 ...
- C# 反射简单介绍
原文:https://blog.csdn.net/wu1020300665/article/details/82958455 1.什么是反射 反射是.NET中的重要机制,通过反射,可以在运行时获得程序 ...