2018-10-24 23:24:33 qq_34476727 阅读数 47

最近一直在忙,没有继续更Android攻城狮iOS开发,今天继续更新。

Android 开发中我们用Java开发文件的后缀都是.java 结束的,用kotlin开发后缀为.kt,但是ios中我们发现有它有.h和.m之分,下面我们来看一下他们的区别吧:

.h文件
在这里插入图片描述

.m文件
在这里插入图片描述

在.h文件中

      有一个import,这是用来导入工具包,就是foundation框架

      @这个标志表示你使用的是object-c语言

     @interface 是声明类的关键字 

     People是类名

     : 冒号表示继承,oc中是单继承模式

     NSObject是父类

     在@interface和@end之间是用来声明属性和方法的

.h中的@interface @end 这一对也可以写在.m文件的上方,就可以实现在.m文件中声明属性

例如这样
在这里插入图片描述

在.m文件中声明的属性是无法被外界看到的,所以也成为私有属性,而在.h中的属性就是public属性

在.m文件中

#import ”People.h“ 用来导入.h中声明的属性和变量

@implementation People implementation是实现类的关键字

@interface的{ }里面和外面。在与头文件对应的.m文件中的使用是没有什么区别的,直接使用即可,主要区别在于外部调用。

写在@interface的{ }里面的变量只能在本类和子类(派生类)中使用,相当于C++中的保护型(protect)。

而写在@interface的{ }外面的变量可以在任何类中使用,相当于C++中的公有型(public)。

方法的定义就相对简单,带有“-”号的方法只能在本类和子类(派生类)中使用,相当于C++中的保护型(protect)。

带有“+”号的方法可以在任何类中使用,相当于C++中的公有型(public)。

但是,IOS对于开发者使用公有型(public)变量和方法做了十分谨慎的限定,公有型的变量有@property属性进行引用计数和内存限制(这个以后再讲)。而带有“+”号的公有型方法还有static的属性,可以直接使用类名进行调用。
C++中的私有型(private)与保护型和公有型的变量(方法)区别在于无法被外部调用,因此IOS做了个巧妙的方法加以区别,将私有型变量(方法)放入.m文件中定义。

在.m文件的开始处有一个@interface定义,写在{ }里面的变量就是本类的私有型(private)变量。在{ }外面是不能再定义变量只能定义方法,这里定义的方法也是私有型的。

2018-03-22 16:41:32 u013857988 阅读数 759

# -*- coding: utf-8 -*-

import random

import os


def getArray():

    first = "abcdefghijklmnopqrstuvwxyz"

    second = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

    third = "1234567890"

    number = "345"

    index = 0

    for i in range(500):

        final=(random.choice(first))

        index = random.randint(3, 5)

        for i in range(index):

            final+=(random.choice(first))

        final += (random.choice(second))

        for i in range(index):

            final+=(random.choice(third))

        array.append(final)

classArray = ['NSString','UILabel','NSDictionary','NSData','UIScrollView','UIView','UITextView','UITableView','UIImageView']#.h文件里属性的类型从这个数组里随机选

viewArray = ['UILabel','UIScrollView','UIView','UITextView','UITableView','UIImageView']#.m文件里创建的元素的类型从这个数组里随机选

array = []

getArray()#用于生成.h和.m文件中将要用的属性名

array = list(set(array))


#.h文件添加废代码

def HFileAddMj(file_path,old_str1,old_str2,old_str3,old_str4,old_str5):

    

    file_data = ""

    Ropen=open(file_path,'r')

    for line in Ropen:

        nameStr = random.choice(array)

        className = random.choice(classArray)

        if old_str1 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)#防止创建的属性名重复(创建一个从数组中删除一个)

        elif old_str2 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str3 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str4 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str5 in line:

            line += '\n\n/*********mjbwenjian**********/\n@property(nonatomic,strong)'+className +' * '+nameStr+';\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        else:

            file_data += line

    Ropen.close()

    Wopen=open(file_path,'w')

    Wopen.write(file_data)

    Wopen.close()

    print(file_data)


#.m文件添加废代码

def MFileAddMj(file_path,old_str1,old_str2,old_str3,old_str4,old_str5,old_str6,old_str7):

    

    file_data = ""

    Ropen=open(file_path,'r')#读取文件

    for line in Ropen:

        nameStr = random.choice(array)

        className = random.choice(viewArray)

        if old_str1 in line:#如果.h文件中的某一行里包含old_str,则往这一行添加一下语句

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+nameStr+'.userInteractionEnabled = YES;\n'+nameStr+'.layer.masksToBounds = YES;'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)#防止创建的元素名重复(创建一个从数组中删除一个)

        elif old_str2 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.layer.borderWidth = 1;'+nameStr+'.clipsToBounds = YES;\n'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str3 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str4 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str5 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str6 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        elif old_str7 in line:

            line += '\n\n/*********mjbwenjian**********/\n'+className +' * '+nameStr+' = '+'[['+className+' alloc]initWithFrame:CGRectMake('+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+','+str(random.randint(0,100))+')];\n'+nameStr+'.backgroundColor = [UIColor whiteColor];'+nameStr+'.layer.borderColor = [[UIColor greenColor] CGColor];'+' '+nameStr+'.layer.cornerRadius ='+str(random.randint(5,10))+';\n'+'\n/*********mjbwenjian**********/\n\n'

            file_data += line

            array.remove(nameStr)

        

        else:

            file_data += line

    Ropen.close()

    Wopen=open(file_path,'w')

    Wopen.write(file_data)

    Wopen.close()

    print(file_data)





def file_name(file_dir):

    for root, dirs, files in os.walk(file_dir):

        #print(root) #当前目录路径

        #print(dirs) #当前路径下所有子目录

        print(files) #当前路径下所有非目录子文件

        fileNameArray = files

        #遍历文件夹下的.h和.m文件并添加废代码

        for file in files:

            if '.h' in file:#file_dir+'/'+file含义是file_dir文件夹下的file文件

                HFileAddMj(file_dir+'/'+file, "l;", "m;","n;","q;","y;")#往凡是以"l;", "m;","n;","q;","y;"这些中的某一个结尾的oc语句后添加费代码

            if '.m' in file:

                MFileAddMj(file_dir+'/'+file, "n];", "w];","m];","c];","p];","q];","l];")#往凡是以"n];", "w];","m];","c];","p];","q];","l];"这些中的某一个结尾的oc语句后添加费代码

#要修改的文件所在的文件夹路径

file_floadPath = '/Users/zhoujinglin/Desktop/python-H-M'#要修还得文件所在的文件夹路径


file_name(file_floadPath)

2015-11-24 16:51:00 Felicity294250051 阅读数 1403
创建应用程序之后之后,默认有AppDelegate.h文件与AppDelegate.m文件。  
 
AppDelegate为何物?
 
AppDelegate为整个应用的一个代理,提供程序启动、退出等类似监控的接口。  
 
 
 
 
AppDelegate.m  
 
接口所在的文件,常见接口有:  
 
application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions//应用程序启动后,要执行的委托调用  
 
applicationWillResignActive:(UIApplication *)application//应用程序将要由活动状态切换到非活动状态时执行的委托调用,如按下home 按钮,返回主屏幕,或全屏之间切换应用程序等。  
 
applicationDidEnterBackground:(UIApplication *)application//在应用程序已进入后台程序时,要执行的委托调用。所以要设置后台继续运行,则在这个函数里面设置即可。  
 
applicationWillEnterForeground:(UIApplication *)application//在应用程序将要进入前台时(被激活),要执行的委托调用,与applicationWillResignActive 方法相对应。  
 
applicationDidBecomeActive:(UIApplication *)application//在应用程序已被激活后,要执行的委托调用,刚好与  applicationDidEnterBackground 方法相对应。  
 
applicationWillTerminate:(UIApplication *)application//在应用程序要完全退出的时候,要执行的委托调用。  
 
 
 
全局变量  
 
AppDelegate可以在整个应用程序中调用,在其他页面中可以使用代码段获取AppDelegate的全局变量:AppDelegate *appDelegate=[[UIApplication sharedApplication] delegate];  
 
因此可以在AppDelegate.h中定义需要全局使用的变量。  
 
 
 
系统启动代理(第一个页面的加载)  
 
application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
 
一般在该代理接口中需要进行应用系统window(程序显示窗口)配置,完成页面弹出效果。(AppDelegate默认拥有UIWindow *window实例变量)  
可以使用以下代码段完成:  
 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];//显示窗口配置  
    LoginViewController *login = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];//初始化应用系统需要显示的第一个页面(一般为ViewController)  
    self.window.rootViewController = login;//配置window窗口的rootViewController实例  
    //判定系统版本,选择页面加载方式  
    if ( [[UIDevice currentDevice].systemVersion floatValue] < 6.0)  
    {  
        [self.window addSubview:login.view];  
    }  
    else  
    {  
        [self.window setRootViewController:login];  
    }  
    [self.window makeKeyAndVisible];  
    return YES;  
 
 
 
补充:应用创建之后可以在Supporting Files分组中看到main.m类文件,是整个应用最开始的入口。 
执行的代码段为:return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 最后一个参数即为应用中的AppDelegate类的实例,执行这段程序即进入AppDelegate类中的application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  方法接口。
2015-03-03 16:01:08 sinat_20037505 阅读数 496


iOS给.h  .m文件换名称




2016-05-10 14:31:12 qq_33391441 阅读数 422

在h头文件中定义一个属性对外是readonly的,但在类的内部是可读写的。所以可以在m源文件中的@interface部分重新定义此属性为readwrite,此时此属性对外是只读的,对内是读写的,此部分申明变量和属性。申明的变量,属性和方法均为私有的,只能够被当前类访问,相当于private

注明:在h文件中定义的变量,在外部可见

.h声明了类,相当于java的接口,在这里interface块外声明的函数和属性都是外部可见的,但是在块内的貌似是私有的
.m里面的所有东西都是对外封闭的  这样就是有效的源码的开源与闭源;


没有更多推荐了,返回首页