我正在使用最新的SDK开发iOS 5.0+应用程序。
我有这两种方法。
在UserPreferences
上课。
+ (User*)getUserFromUserPreferences;
在ProfileViewController
上课:
- (void)showUserData:(UserProfile*)userToShow;
继承自UserProfile
的<{1}}:
User
最后,我有这个代码,它给了我一个警告:
@interface UserProfile : User
@property (nonatomic, strong) NSNumber* isBlockedByMe;
@property (nonatomic, strong) NSNumber* isMyFriend;
@end
留言:
[self showUserData:[User getUserFromUserPreferences]];
。
如果我这样做是否正确?
Incompatible pointer types sending User* to parameter of type UserProfile*
或许,我会有内存泄漏或任何其他问题。
答案 0 :(得分:1)
你的派生是从前到后的。您不能将基类实例(User
)传递给接受派生类实例(UserProfile
)的方法,但您可以反过来。
如果您将方法更改为showUserData:(User *)user
,则它会同时接受User
和UserProfile
个实例。
答案 1 :(得分:1)
不,这不正确。它可能会使警告无声,但这样做并不理想。通常,您可以将派生类对象作为参数传递给接受基类实例的函数。你正在做的是另一种方式。
为什么这是错误的:由于您是强制类型转换基类对象到派生类,现在如果您尝试访问此对象中的派生类内存空间,它将在运行时崩溃。该对象不包含派生类部分。
希望有所帮助!