老粗ios学习笔记(2)-ui开发 窗口间传递参数

Swift vs Objective-C:为何选择Objective-C开发iOS应用?
本文深入探讨了在iOS开发领域,Objective-C与Swift之间的抉择。详细阐述了Objective-C的独特优势,包括其在生态系统中的成熟度、社区支持以及与现有代码库的兼容性。同时,对比了Swift的现代特性与Objective-C的长处,旨在帮助开发者做出更适合项目需求的技术选型。

前言:生命不止,折腾不休.窗口间传参数,一般用什么代理模式,(到现在还没有搞懂代理,所以不鸟这个.),难道不能向windows,安卓一样,几行代码就完成参数传递,非要写一堆的代理文件,粗人心想,实现不了,就把老乔给挖出来狠批一顿,还好一下成功了,节约了不少口水.

1.子窗口头文件中,定义2个窗口级的变量:para存放父窗口传过来变量,pvc保存父窗口指针. 和两个函数:设置参数与设置父窗口.(说人话:就是定义了参数和保存父窗口的set方法)

@interface LoginViewController : UIViewController{

    UIButton *mybut;
    //变量1:保存父窗口传递的函数
    NSString * para;
    //变量2:保存父窗口ViewController指针
    UIViewController *pvc;

    //函数1:保存父窗口View指针  (返回值) 函数名:(参数1类型)参数1名称
    -(void)SetParentView:(UIViewController *)viewController;
    //设置初始化参数
    //函数2:让父窗口向子窗口设置参数 (返回值) 函数名:(参数1类型)参数1名称
    -(void)setPara:(NSString *)pwin_para;
}

2.子窗口m文件中实现这两个方法.

@implementation LoginViewController 
    NSLog(@"父窗口参数:%@",pWinPara);
    //调用父窗口函数
    [(ViewController *)pvc finishWindow:@"子窗口调用父窗口函数:老子就灿烂!!"];
    //关闭窗口
    [self dismissViewControllerAnimated:YES completion:nil];
}

//设置初始化参数
-(void)setPara:(NSString *)pwin_para{
//题外话,之前把参数命名为para始终告警说Local declaration of 'para' hides instance variable
//查明原因为与本地函数同名,局部变量与本地函数同名都要闹,闹个屁.
    pWinPara = pwin_para;
}

//保存父窗口viewController
// (返回值) 函数名:(参数1类型)参数1名称
-(void)SetParentView:(ViewController *)viewController{
    pvc = viewController;
}
@end

3.父窗口头文件,增加一个函数,让子窗口可以在关闭的时候调用.

@interface ViewController : UIViewController{}
//子窗口关闭时调用
-(void)finishWindow:(NSString *)resParam;
@end


4.父窗口m文件,实现这个函数

@implementation ViewController
- (IBAction)mianButClick:(id)sender {
    NSLog(@"点击了按钮");
    LoginViewController *loginController = [[LoginViewController alloc] initWithNibName:@"myView2" bundle:nil];
    //初始化子窗口参数    
    [loginController setPara:@"父窗口给你点阳光"];
     
    //将父窗口的传给子窗口备用.
    [loginController SetParentView:self];
    //看不懂,反正用了这个才能调用子窗口
    UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:loginController];
    //window的模式窗口都是弹出后不在执行后面的代码,连js alert都是,ios奇葩,弹出窗口代码之后继续执行后面的代码,连窗口什么时候关闭都不知道.碧池!
    [self presentViewController:navigationController  animated:YES  completion:^(void){
      // 可以在这儿加上窗口打开成功后执行的代码
    }];
//如果这儿有代码,模式窗口创建时就都执行了.
}

//只能在关闭窗口前调用这个函数,这样才知道窗口被关闭了.
-(void)finishWindow:(NSString *)resParam{
   //在这写关闭子窗口的要做的事情.
    NSLog(@"%@",resParam);
}
@end

5.总结,执行逻辑

创建子窗口,将参数传给子窗口,把自己也传给子窗口,子窗口欢快的执行他的代码,关闭的时候,调用父窗口函数通知窗口关闭.


6.附加:

另外还可以通过全局变量进行参数传递.

在AppDelegate.h定义一个属性 myName

#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate>{}
//定义一个属性,里面大概是这些意思, <span style="font-family: Arial, Helvetica, sans-serif;">nonatomic:禁止多线程,retain:增加set和get方法 strong 申明的变量将变为持有者(写的啥jb,看不懂).</span>
@property (nonatomic, retain) NSString *myName;
@property (strong, nonatomic) UIWindow *window;
@end

在AppDelegate.m中,synthesize合成一下这个变量.

#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
//不知道什么意思,查了一下资料说h里面用@<span style="font-family: Arial, Helvetica, sans-serif;">property,m文件用这个就实现了类似set方法了.</span>
@synthesize myName;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {return YES;}
- (void)applicationWillResignActive:(UIApplication *)application {}
- (void)applicationDidEnterBackground:(UIApplication *)application {}
- (void)applicationWillEnterForeground:(UIApplication *)application {}
- (void)applicationDidBecomeActive:(UIApplication *)application {}
- (void)applicationWillTerminate:(UIApplication *)application {}
@end

使用全局变量,任意文件引入import "AppDelegate.h",然后就可以愉快的使用了.

AppDelegate *myDelegate = [[UIApplication sharedApplication] delegate];

myDelegate.myName =@"bababa";

下篇写什么呢?准备写cordova 调用 原生的ios窗口.

后记:

明明swift大行其道,为毛要objc,知道为毛吗?百度的sdk mb的用的objc写的例子,cordova核心代码都是objc,我也想用swift,但是学了也看不懂cordova的核心代码,看不懂百度地图的例子. sob!





### Matlab 中的数据清洗与预处理方法 #### 数据清洗 数据清洗是指通过一系列操作去除或修正错误、不一致或冗余的数据。以下是几种常见的数据清洗技术及其在 MATLAB 中的应用: 1. **删除重复项** 使用 `unique` 或 `rmmissing` 函数可以轻松移除数据集中的重复记录或含有缺失值的行/列。例如,假设有一个矩阵 `data` 需要清理其中的重复行: ```matlab cleanedData = unique(data, 'rows'); ``` 2. **填充缺失值** 对于存在 NaN 的数据,可以选择用均值或其他统计量替代。MATLAB 提供了多种方式完成此任务,比如使用 `fillmissing` 函数: ```matlab dataWithFilledValues = fillmissing(data, 'constant', mean(data(:))); ``` 这里选择了全局平均值作为替换策略[^1]。 3. **检测并剔除异常值** 利用标准差法或者 IQR 法识别离群点,并将其标记为无效或直接删除。以下是一个基于 Z-score 的例子: ```matlab zScores = abs(zscore(data)); cleanData = data(zScores < 3); % 只保留Z分数小于3的部分 ``` #### 数据转换 为了使输入更适合后续算法的要求,往往还需要执行某些形式的数据变换。 1. **归一化 (Normalization)** 将数值范围缩放到特定区(通常是 [0,1]),有助于提高计算效率以及防止大数淹没小数现象的发生。 ```matlab normalizedData = normalize(data); ``` 2. **标准化 (Standardization)** 把每维特征调整到零均值单位方差状态,尤其适用于距离度量敏感型的学习器。 ```matlab standardizedData = zscore(data); ``` #### 特征工程 除了基础层面的操作之外,高级别的特性构建也是不可或缺的一环。 1. **降维处理** 主成分分析(Principal Component Analysis, PCA)是一种常用的技术手段用来降低维度的同时尽可能保持原有信息含量不变。 ```matlab coeff = pca(data); reducedDimData = data * coeff(:,1:k); % k表示目标维度数目 ``` 以上便是围绕着 MATLAB 展开的一些典型做法介绍[^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值